Naj S
Naj S

Reputation: 335

R shiny; how to use multiple inputs from selectInput to pass onto 'select' option in dplyr?

I have an app wherein I am looking to take user input in the "ui" file and use that information to update a dataframe in the "server" file. The following is a simplified version of what the code looks like:

Dataframe <- readRDS(Dataframe.rds)
Table <- readRDS(Table.rds)    

ui <- fluidPage(
     selectInput("Location","Location",
              unique(as.character(Table$Locations)), multiple = TRUE)
                )

server <- function(input,output) {
 Dataframe2 <- Dataframe %>% select(get(input$Location))
                                 }

The above code works if I do not use the "multiple = TRUE" option for selectInput, meaning that the Dataframe2 object only selects the column that matches with the single input that the user has chosen. However, I do not know how I can do the same thing for multiple inputs, when the choices could vary from only 1 item being passed on from selectInput up to 10 items in total.

Upvotes: 14

Views: 41983

Answers (2)

Nikita Kaymonov
Nikita Kaymonov

Reputation: 1

Why don't you pass a vector into select function if you need more than one option?

    ui <- fluidPage(
  titlePanel("App"),
      selectInput('column', 'Select a column', names(DataFrame), multiple = TRUE)
      ),
    mainPanel(
      DT::DTOutput('table')))

server <- function(input, output){
  output$table <- DT::renderDT({
    DataFrame%>%
      select(c(input$column))
  })
}

I simplified but hopefully you got the idea, that worked for me.

Upvotes: 0

Valter Beaković
Valter Beaković

Reputation: 3250

If I understood your question correctly this is an example with multiple selection using the mtcars data frame:

library(shiny)
library(dplyr)
data(mtcars)

ui <- fluidPage(
  titlePanel("MTCARS"),
  selectInput("Columns","Columns",
              names(mtcars), multiple = TRUE),
  verbatimTextOutput("dfStr")
)

server <- function(input, output) {
    Dataframe2 <- reactive({
            mtcars[,input$Columns] 
    })
    output$dfStr <- renderPrint({
            str(Dataframe2())
    })
}

shinyApp(ui, server)

Upvotes: 21

Related Questions