Buenas a todos. Os cuento mi problema. Tengo un documento rmd interactivo, con shiny y quiero que un selectinput se actualice según lo seleccionado en otro selectInput. En realidad lo que quiero con el primer selectInput es seleccionar un data.frame de una lista de data.frame, y que se actulaice el segundo selectInput con los valores únicos de una variable del data.frame elegido.
El caso es que no consigo hacerlo funcionar. Sin embargo, si en vez de una lista de data.frame tengo un solo data.frame y con el primer selectInput hago un subset si funciona. Os pongo dos ejemplso reproducibles para que se vea mejor. Ejemplo 1. Subset de un data.frame. Si funciona. Al seleccionar un valor de cyl en el documento resultante se actualiza la lista de disp disponibles sólo a los que están en ese data.frame --- title: "Test observe" output: html_document runtime: shiny --- ```{r echo=FALSE} datos <- mtcars # datos <- split(datos, datos$cyl ) un_cyl <- unique(mtcars$cyl) gears <- c(3,4,5) disp_list <- unique(mtcars$disp) inputPanel( selectInput("cyl", label = "cyl", choices = un_cyl), selectInput("disp", label = "disp", choices = disp_list, selected = disp_list[1]) ) eventos_sel <- reactive({ eventos <- datos[datos$cyl == input$cyl,] eventos }) elegibles <- reactive({ tmp <- eventos_sel() tmp <- unique(tmp$disp) return(tmp) }) # hacer un updateSelectInput observe({ updateSelectInput(session, inputId = "disp", choices = elegibles()) }) renderPrint(elegibles()) ``` Ejemplo 2. Elegir un data.frame de una lista. No funciona. Da error Error in [[: attempt to select less than one element in get1index. Aunque si comento el observe, se ve qeu en renderPrint(elegibles()) si que está bien. Pongo en negrita los cambios con respecto al ejemplo 1 --- title: "Test observe" output: html_document runtime: shiny --- ```{r echo=FALSE} datos <- mtcars # creo lista de data.frame, cada elemento tiene nombre del # cyl *datos <- split(datos, datos$cyl )* un_cyl <- unique(mtcars$cyl) gears <- c(3,4,5) disp_list <- unique(mtcars$disp) inputPanel( selectInput("cyl", label = "cyl", choices = un_cyl), selectInput("disp", label = "disp", choices = disp_list, selected = disp_list[1]) ) eventos_sel <- reactive({ * eventos <- datos[[input$cyl]]* eventos }) elegibles <- reactive({ tmp <- eventos_sel() tmp <- unique(tmp$disp) return(tmp) }) # hacer un updateSelectInput observe({ updateSelectInput(session, inputId = "disp", choices = elegibles()) }) renderPrint(elegibles()) ``` Gracias [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es