R Shiny中的SelectizeInput过滤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R Shiny中的SelectizeInput过滤相关的知识,希望对你有一定的参考价值。

我有2个问题:1)我想知道是否有可能根据之前的输入进行选择。请查看代码,我将解释我的意思:

library(shiny)

Country <- c("USA", "Mexico", "Canada", "China", "Vietnam", "India", "France", "Germany", "Poland")
Region <- c("Americas", "Americas", "Americas", "Asia", "Asia", "Asia", "Europe", "Europe", "Europe")
Product <- c(11, 22, 33, 44, 55, 66, 77, 88, 99)
Date <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
DF <- cbind(Region, Country, Product, Date)
DF <- as.data.frame(DF)

Region <- as.factor(sort(unique(DF$Region)))
Country <- as.factor(sort(unique(DF$Country)))

ui <- fluidPage(titlePanel("Filtering experiments"),
sidebarLayout(
    # Sidebar panel for inputs ----
    sidebarPanel(width = 3,

           selectizeInput("RegionSelect", "Region", Region, selected = NULL, multiple = TRUE),
           selectizeInput("CountrySelect", "Country", Country, selected = NULL, multiple = TRUE)),

    # Main panel for displaying outputs ----
    mainPanel( fluidPage(  box(width = 12, tableOutput("table")) )     )    )   )server <- function(input, output) {

output$table <- renderTable({
    filtered <- DF
    if (!is.null(input$RegionSelect)) {filtered <- filtered %>% filter(Region == input$RegionSelect)}
    if (!is.null(input$CountrySelect)) {filtered <- filtered %>% filter(Country == input$CountrySelect)}

    Total <- data.frame(filtered$Product)
    ShowTable <- data.frame(cbind(Total))
    ShowTable
})}shinyApp(ui, server)

[只要将区域选择为“美洲”,用户仍会看到所有国家,不仅是美国,加拿大和墨西哥。

我试图通过过滤来修复它:

       selectizeInput("CountrySelect", "Country", as.factor(sort(unique(filtered$Country %>% filter(Region == input$RegionSelect)}))), selected = NULL, multiple = TRUE))

但是它没有用,所以我希望你有一些想法。

2)即使“ Multiple = TRUE”,只要在同一输入行中选择了2个或更多输入,应用程序就会停止工作。

提前感谢!

答案

您可以添加updateSelectInput,如下所示:

     observe({

         region <- input$RegionSelect
         req(region)

         updateSelectInput(session, "CountrySelect", 
              choices = filter(DF, Region == !!region)$Country)

                    })

此外,请修正您的(几乎)工作示例:您需要library(dplyr),然后删除box(因为它仅来自shinydashboard,而您没有使用)。

以上是关于R Shiny中的SelectizeInput过滤的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny SelectizeInput:从分组选择中传递值不起作用

Selectizeinput 输入互斥 R Shiny

R Shiny(selectizeInput):找不到对象“选择”

在 Shiny 中,数据框可以用作 selectizeInput 中的选择吗?

Shiny - Selectizeinput 更新

Shiny:根据选择更新 selectizeInput 选择