Je veux en créer deux selectizeInput(), mais l'un dépend de l'autre.

Je veux dire, j'ai l'état et la région. Si j'ai sélectionné un état spécifique, je souhaite afficher uniquement sa région dans un autre selectizeInput() et vice-versa.

Mon interface utilisateur:


selectizeInput("sta", "State:", 
               c("Todos", str_sort(unique(as.character(Coop_ativas$state)))),
               selected = "Todos", options = list(placeholder = 'Todos')), 

selectizeInput("regi", "region:",c("Todas", ( 
    if (Coop_ativas$region[Coop_ativas$state %in% as.character(input$sta)]) 
        str_sort(unique(as.character(Coop_ativas$region[Coop_ativas$uf %in% 
                                     as.character(input$sta)])))
    else 
        str_sort(unique(as.character(Coop_ativas$regiao))))), selected = "Todas",options = list(placeholder = 'Todas')), 


Mais j'ai l'erreur Error in Coop_ativas$uf %in% as.character(input$est) : object 'input' not found

Puis-je le faire sans filtrer ma base de données dans le serveur?

1
RxT 11 févr. 2021 à 21:28

1 réponse

Meilleure réponse

Vous devez mettre à jour selectizeInput à partir du serveur. Utilisez-le dans votre interface utilisateur (ou l'autre choix de votre condition, comme vous préférez).

selectizeInput("regi", "region:",
               choices = c("Todas"),
               selected = "Todas",options = list(placeholder = 'Todas'))

Puis mettez ceci dans votre serveur


observe({
req(input$sta)
  if (Coop_ativas$region[Coop_ativas$state %in% as.character(input$sta)]) {
    choice = c("Todas", str_sort(unique(as.character(Coop_ativas$region[Coop_ativas$uf %in% as.character(input$sta)]))))
  } 
  else {
    choice = c("Todas", str_sort(unique(as.character(Coop_ativas$regiao)))))
  }
  
  updateSelectizeInput(session, "regi", choices = choice)
  
})

Et enfin assurez-vous que votre fonction serveur est définie comme server <- function(input, output, session){} plutôt que server <- function(input, output){}

1
zimia 11 févr. 2021 à 20:28