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?
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)
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