我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]
Posted
技术标签:
【中文标题】我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]【英文标题】:Could I get the choices of a SelectInput in the ui from a reactive function in server? (RShiny) [duplicate] 【发布时间】:2021-07-04 01:18:16 【问题描述】:我在服务器中创建了一个反应函数来获取元素列表。这个想法是在 ui 中将列表的每个元素显示为单独的选择,就像 selectInput 在 ui 中所做的那样。
我用 mtcars 写了一个例子。
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = options, "Select one", choices = cars())
),
mainPanel(
verbatimTextOutput("print")
)
)
)
server <- function(input, output)
cars <- reactive(
data("mtcars")
cars <- list(rownames(mtcars))
return(cars)
)
output$print <- renderPrint(cars())
# Run the application
shinyApp(ui = ui, server = server)
如果您在 ui 中删除或评论此行:selectInput(inputId = options, "Select one", choices = cars())
,则该应用程序可以正常工作。输出是这样的:
[[1]]
[1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710"
[4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant"
[7] "Duster 360" "Merc 240D" "Merc 230"
[10] "Merc 280" "Merc 280C" "Merc 450SE"
[13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood"
[16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128"
[19] "Honda Civic" "Toyota Corolla" "Toyota Corona"
[22] "Dodge Challenger" "AMC Javelin" "Camaro Z28"
[25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2"
[28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino"
[31] "Maserati Bora" "Volvo 142E"
但是,如果我尝试在 ui 中放置一个 selectInput 来显示该列表,我会收到以下错误:Error in cars (): could not find function "cars"
我不知道这是否可能,但我可以在 ui 的选择栏中显示该列表的每个元素吗?为了让用户能够选择一个选项并执行我必须编程的其他事情。
非常感谢,
问候
【问题讨论】:
您不能将响应式值放入 UI。 UI 仅在启动时运行一次。您需要使用updateSelectInput
之类的函数在 UI 呈现后更新选项。或者你可以等待在服务器中创建 UI 使用uiOutput + renderUI
【参考方案1】:
在服务器端生成selectInput
。
library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
uiOutput('selectUI')
),
mainPanel(
verbatimTextOutput("print")
)
)
)
server <- function(input, output)
cars <- reactive(
data("mtcars")
cars <- rownames(mtcars)
return(cars)
)
output$selectUI <- renderUI(
selectInput(inputId = 'options', "Select one", choices = cars())
)
output$print <- renderPrint(cars())
# Run the application
shinyApp(ui = ui, server = server)
【讨论】:
非常感谢!有效。我不知道 uiOutput 和 renderUI 函数。谢谢!以上是关于我可以从服务器中的反应函数中获得 UI 中的 SelectInput 的选择吗? (RShiny)[重复]的主要内容,如果未能解决你的问题,请参考以下文章