Shiny R: Populate a list from input and return list on output via reactive

4.3k Views Asked by At

I try to populate a list on shiny with the elements of the list passed over from a shiny input. The list should accumulate all the made choices. The list should finally be sent to the shiny output. Actually I already get a list which I can send to output. This list is however always just of length one and this single element gets updated as the input does. Actually I am only interested in the "names" of the list, this is why I assign the value 1 to each name element:

UI.R
shinyUI(
    fluidRow(   
        column(1,
            # reactive input 
            selectInput("Input1", 
                        label = "Select Parameter 1",
                        choices = c("none",letters[1:16]),
                        multiple = T),
            selectInput("Input2", 
                        label = "Select Parameter 2",        
                        choices = c("none",c(1:24) )
                        multiple = T),        
            # printout of list
            htmlOutput("printoutList")
        ) # end of column
    ) # end of fluid row
) # end of Shiny UI

Shiny.R

# create an empty list
container <- list()
shinyServer(function(input, output) {

    # pass over input to reactive
    inputInfo <- reactive({
        if(input$Input1 == "none" | input$Input2 == "none") {
            "-"               
        } else { 
            paste(input$Input1 ,input$Input2, sep = "")
        }
    }) 

    # fill list and pass over list to output 
    output$printoutList <- renderUI({                    
        container[[inputInfo()]] <- 1
        paste("You have chosen: ", names(container), sep = "")        
    }) 

)} #end of shinyServer function 

Any idea how to solve this? I already tried around a lot... unfortunately I am quite new to R, especially to shiny ! I would really appreciate any kind of help! Thanks !

1

There are 1 best solutions below

3
On

include the multiple = TRUE argument for selectInput

 selectInput("Input1", 

          label = "Select Parameter 1",
          choices = c("none",letters[1:16]),
          multiple = TRUE

          )

But also it seems like your server and ui files are mixed up and you don't have the shinyServer function in the code.