R 具有可选筛选功能的Shining中的反应式数据表
我在创建一个简单闪亮的应用程序时遇到了双重问题。我知道这个话题在其他几个问题中都有涉及,但在研究了这些问题之后,我还没有找到一个能完全涵盖我的问题的问题 我希望呈现mtcars表(默认选项为完整的32行),然后我希望在允许多个选择的档位数量上应用反应过滤器 以下代码在许多方面都不起作用:R 具有可选筛选功能的Shining中的反应式数据表,r,datatable,shiny,datatables,reactive-programming,R,Datatable,Shiny,Datatables,Reactive Programming,我在创建一个简单闪亮的应用程序时遇到了双重问题。我知道这个话题在其他几个问题中都有涉及,但在研究了这些问题之后,我还没有找到一个能完全涵盖我的问题的问题 我希望呈现mtcars表(默认选项为完整的32行),然后我希望在允许多个选择的档位数量上应用反应过滤器 以下代码在许多方面都不起作用: 除非设置了“齿轮过滤器”,否则不会渲染mtcars表。相反,我在应用程序中收到一条错误消息:“结果的长度必须为32,而不是0” 选择多个档位级别不能正确相加。当我分别选择每个档位编号时,表格会正确呈现,但是,比
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)
ui解决问题的关键是
当您的输入为NULL
(即,当您第一次打开应用程序时)时,创建一个if语句
,该语句只会吐出数据集
选择多个输入时,需要使用%
运算符中的%
见下面的代码:
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)
ui解决问题的关键是
当您的输入为NULL
(即,当您第一次打开应用程序时)时,创建一个if语句
,该语句只会吐出数据集
选择多个输入时,需要使用%
运算符中的%
见下面的代码:
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)
ui我相信您需要gear%在%input$pickvalue中
如果允许多个选项按…过滤,我相信您需要gear%在%input$pickvalue中
如果允许多个选项按…过滤,谢谢!我想我会有一个关于更新选择输入的问题。假设我有额外的selectInput子句,如Carb:selectInput(“pickvalue2”,label=“Carb”,unique(mtcars$Carb),selected=NULL,multiple=T)),Carb有6个唯一值,但并非所有这些值都与Gears的3个唯一值相结合。是否可以反应式更新selectInputs,以便它只显示齿轮和CARB的现有组合,而不返回空行?是的,您需要使用uiOutput/renderUI将第二个selectInput放在服务器端,然后根据input$pickvalue的SelectionThank筛选选项,但哪一个是“第二个”,因为我可以开始用Carb或Gears进行过滤在这种情况下,如果你想让Carb或Gears成为第一个过滤器,那么你必须将它们都放在服务器中,并在使用另一个过滤器时使用一些观察捕捉。这会变得更加复杂,但我知道,我从未实施过任何观察者/行动,这似乎有点太多了。你可能有一些很好的教程,我可以从中学习吗?谢谢!我想我会有一个关于更新选择输入的问题。假设我有额外的selectInput子句,如Carb:selectInput(“pickvalue2”,label=“Carb”,unique(mtcars$Carb),selected=NULL,multiple=T)),Carb有6个唯一值,但并非所有这些值都与Gears的3个唯一值相结合。是否可以反应式更新selectInputs,以便它只显示齿轮和CARB的现有组合,而不返回空行?是的,您需要使用uiOutput/renderUI将第二个selectInput放在服务器端,然后根据input$pickvalue的SelectionThank筛选选项,但哪一个是“第二个”,因为我可以开始用Carb或Gears进行过滤在这种情况下,如果你想让Carb或Gears成为第一个过滤器,那么你必须将它们都放在服务器中,并在使用另一个过滤器时使用一些观察捕捉。这会变得更加复杂,但我知道,我从未实施过任何观察者/行动,这似乎有点太多了。你可能有一些好的教程,我可以从中学习吗?