闪亮的selectInput从下拉列表中选择全部

时间:2018-05-07 16:24:19

标签: r shiny dplyr

我有像这样选择输入下拉列表:

selectInput("locInput", "Location", choices=c("All","New Mexico", "Colorado", "California"))

我想要实现的是默认选择输入而不是过滤任何东西,就像选择“全部”时那样它应该列出所有观察结果(所以来自加利福尼亚州,科罗拉多州等) 所以我试图做的是为此创建简单的逻辑:

server <- function(input, output) {
  filtered<-reactive({
    shows %>%
    filter(Length >= input$lenInput[1],
           Length <= input$lenInput[2],
           if (input$locInput != "All"){
           Location==input$locInput
    })

但似乎没有用。 任何想法我可以改变什么才能使其正常工作?

2 个答案:

答案 0 :(得分:19)

精彩的shinyWidgets包已在其Select All

中具有pickerInput功能
library(shiny)
library(shinyWidgets)

ui <- basicPage(
  sidebarPanel(
    pickerInput("locInput","Location", choices=c("New Mexico", "Colorado", "California"), options = list(`actions-box` = TRUE),multiple = T)
  )
)

server <- function(input, output) {

  observe({
    print(input$locInput)
  })

}

shinyApp (ui = ui, server = server)

enter image description here

答案 1 :(得分:3)

你需要一个其他条件。令人惊讶的是,如果条件为TRUE,则此方法有效,但如果条件为FALSE,那么filter会出现错误,因为您的条件为空。要解决此问题,只需添加else TRUE,它将不会过滤任何行(因为所有行的TRUE都是TRUE):

data(iris)
iris %>% filter(Petal.Length > 6.4,
                if (FALSE) Sepal.Length > 7.7 else TRUE)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          7.6         3.0          6.6         2.1 virginica
2          7.7         3.8          6.7         2.2 virginica
3          7.7         2.6          6.9         2.3 virginica
4          7.7         2.8          6.7         2.0 virginica

iris %>% filter(Petal.Length > 6.4,
                if (TRUE) Sepal.Length > 7.6 else TRUE)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          7.7         3.8          6.7         2.2 virginica
2          7.7         2.6          6.9         2.3 virginica
3          7.7         2.8          6.7         2.0 virginica