我在创建一个简单的 Shiny 应用程序时遇到了双重问题。我知道这个话题在其他几个问题中都有涉及,但是在研究了它们之后,我还没有找到一个可以完全涵盖我的问题的问题。
我想渲染 mtcars 表(默认选项是完整的 32 行(,然后我想对允许多选的齿轮数量应用反应式过滤器。
以下代码在多种方式中不起作用:
-
除非设置了齿轮过滤器,否则不会呈现 mtcars 表。相反 - 我在应用程序中收到一条错误消息:"结果的长度必须为 32,而不是 0">
-
选择多个档位级别加起来不正确。当我单独选择每个档号时,表格会正确呈现,但是,比方说,当我组合显示档号3和4时,我只返回了10行,这是不正确的。
我提前感谢您的帮助。
ui <- fluidPage(
sidebarLayout(
mainPanel(
selectInput("pickvalue", label = "Gears", mtcars$gear,
selected = NULL, multiple = T)),
tableOutput("tableOut")
)
)
server <- function(input, output, session){
gears <- reactive({
mtcars %>% filter(gear == input$pickvalue) %>% select(-gear)
})
output$tableOut<- renderTable({gears()
})
}
shinyApp(ui = ui, server=server)
问题的关键是
在- 输入
NULL
时(即首次打开应用程序时(创建一个if statement
,该只会吐出数据集 - 选择多个输入时,需要使用
%in%
运算符
请参阅下面的代码:
ui <- fluidPage(
sidebarLayout(
mainPanel(
selectInput("pickvalue", label = "Gears", unique(mtcars$gear),
selected = NULL, multiple = T)),
tableOutput("tableOut")
)
)
server <- function(input, output, session){
gears <- reactive({
dat <- mtcars
if (!is.null(input$pickvalue)){dat <- dat %>% filter(gear %in% input$pickvalue)}
dat <- dat %>% select(-gear)
return(dat)
})
output$tableOut<- renderTable({gears()})
}
shinyApp(ui = ui, server=server)