web-dev-qa-db-fra.com

SelectInput brillant pour tout sélectionner dans la liste déroulante

J'ai une liste déroulante de sélection comme ceci:

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

Ce que je veux réaliser est de faire en sorte que selectinput par défaut ne soit filtré par rien, comme quand "All" est sélectionné alors il devrait lister toutes les observations (donc de Californie, Colorado etc.) Donc ce que j'ai essayé de faire est de créer une logique simple pour ce:

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

Mais ne semble pas fonctionner. Des idées que puis-je changer pour le faire fonctionner correctement?

10
Alex T

Il y a un merveilleux paquet shinyWidgets qui a déjà le Select All fonctionnalité dans son 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

29
Pork Chop

Vous avez besoin d'une autre condition. Étonnamment, cela fonctionne si la condition est TRUE, mais si elle est FALSE, alors filter a une erreur car vous avez une condition vide. Pour résoudre ce problème, ajoutez simplement else TRUE, qui ne filtrera aucune ligne (puisque TRUE est TRUE pour toutes les lignes):

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
3
divibisan