【发布时间】:2022-12-03 05:33:51
【问题描述】:
我有一个闪亮的应用程序,它获取一个数据集并通过多个用户输入对其进行过滤。为此,我使用 selectizeInput 函数,用户可以在其中从列表中选择一个或多个选项,然后通过反应语句运行这些选择以获得所需的最终数据集。我最近注意到,这不再适用于我托管该应用程序的地方之一;这个应用程序是用 Shiny 1.6.0 构建和部署的,它仍在那个位置工作,但它在另一个有 Shiny 1.7.3 的地方不工作。我想知道这是否可能是较新版本的 Shiny 的问题。这是一个示例,其中多项选择导致结果表未填充:
library(shiny)
library(dplyr)
data <- mtcars
ui <- fluidPage(
fluidRow(
column(width = 4, wellPanel(
selectizeInput("carb", "carb:", c("All", sort(unique(data$carb))),
selected = "All", multiple = TRUE,
options = list('plugins' = list('remove_button'),
'create' = TRUE, 'persist' = FALSE)))),
column(width = 8, wellPanel(tableOutput("table")))
)
)
server <- function(input,output,session){
process <- reactive({
req(input$carb) # require some input
if(input$carb == "All"){data} #pass entire dataset if selected
else(data %>% dplyr::filter(carb %in% input$carb))}) # will not work with > 1 selected
output$table <- renderTable({process()})
}
shinyApp(ui = ui, server = server)
只选择一个值可以让一切正常工作,但如果选择多个值,则会出现关于长度 > 1 的条件的错误。以前当这个工作时,我能够为 carb 变量选择类似 1,2 和 4 的东西,结果表将显示具有这三个值之一的所有行。我知道通过在服务器中添加 renderTable 语句,输入被传递到参数:
output$test <- renderTable({as.data.frame(input$carb)})
但是,当我尝试过滤完整数据集时,这不起作用。我可以在 selectizeInput(multiple = FALSE) 时运行所有内容,但理想情况下它应该等于 TRUE,以便用户拥有更多功能。
【问题讨论】: