Buenas, La solución que he encontrado (más bien la que un amigo me ha sugerido) es usar uiOuput y renderUI para crear un ui dinámico que cambie según uno de los input.
En el ejemplo sería algo así. --- 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), uiOutput("ui") ) output$ui <- renderUI({ eventos <- datos[[as.character(input$cyl)]] tmp <- unique(eventos$disp) selectInput("disp", label="Disp", choices = tmp, selected = tmp[1]) }) El vie., 21 abr. 2017 a las 13:01, José Luis Cañadas (< canadasre...@gmail.com>) escribió: > 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