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

Ale*_*x T 8 r shiny dplyr

我有这样的selectinput下拉:

selectInput("locInput", "Location", choices=c("All","New Mexico", "Colorado", "California"))
Run Code Online (Sandbox Code Playgroud)

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

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

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

Por*_*hop 27

有美妙的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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


div*_*san 5

你需要一个 else 条件。令人惊讶的是,如果条件为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
Run Code Online (Sandbox Code Playgroud)