Quiero crear dos selectizeInput(), pero uno depende del otro.

Quiero decir, tengo Estado y Región. Si he seleccionado un Estado específico, quiero mostrar solo su Región en otro selectizeInput() y viceversa.

Mi interfaz de usuario:


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')), 


Pero tengo el error Error in Coop_ativas$uf %in% as.character(input$est) : object 'input' not found

¿Puedo hacerlo sin filtrar mi base de datos en el servidor?

1
RxT 11 feb. 2021 a las 21:28

1 respuesta

La mejor respuesta

Debe actualizar selectizeInput desde el servidor. Use esto en su interfaz de usuario (o la otra opción de su condición, como prefiera).

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

Y luego pon esto en tu servidor


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

Y finalmente asegúrese de que la función de su servidor esté definida como server <- function(input, output, session){} en lugar de server <- function(input, output){}

1
zimia 11 feb. 2021 a las 20:28