Create a select list input control — selectInput
R/input-select.R
  Description
Create a select list that can be used to choose a single or multiple items from a list of values.
Arguments
- inputId
- The - inputslot that will be used to access the value.
- label
- Display label for the control, or - NULLfor no label.
- choices
- List of values to select from. If elements of the list are named, then that name — rather than the value — is displayed to the user. It's also possible to group related inputs by providing a named list whose elements are (either named or unnamed) lists, vectors, or factors. In this case, the outermost names will be used as the group labels (leveraging the - <optgroup>HTML tag) for the elements in the respective sublist. See the example section for a small demo of this feature.
- selected
- The initially selected value (or multiple values if - multiple = TRUE). If not specified then defaults to the first value for single-select lists and no values for multiple select lists.
- multiple
- Is selection of multiple items allowed? 
- selectize
- Whether to use selectize.js or not. 
- width
- The width of the input, e.g. - '400px', or- '100%'; see- validateCssUnit().
- size
- Number of items to show in the selection box; a larger number will result in a taller box. Not compatible with - selectize=TRUE. Normally, when- multiple=FALSE, a select input will be a drop-down list, but when- sizeis set, it will be a box instead.
- ...
- Arguments passed to - selectInput().
- options
- A list of options. See the documentation of selectize.js(https://selectize.dev/docs/usage) for possible options (character option values inside - base::I()will be treated as literal JavaScript code; see- renderDataTable()for details).
Value
A select list control that can be added to a UI definition.
Details
By default, selectInput() and selectizeInput() use the JavaScript library
selectize.js (https://selectize.dev/) instead of
the basic select input element. To use the standard HTML select input
element, use selectInput() with selectize=FALSE.
In selectize mode, if the first element in choices has a value of "", its
name will be treated as a placeholder prompt. For example:
selectInput("letter", "Letter", c("Choose one" = "", LETTERS))
Performance note: selectInput() and selectizeInput() can slow down
significantly when thousands of choices are used; with legacy browsers like
Internet Explorer, the user interface may hang for many seconds. For large
numbers of choices, Shiny offers a "server-side selectize" option that
massively improves performance and efficiency; see
this selectize article
on the Shiny Dev Center for details.
Note
The selectize input created from selectizeInput() allows
deletion of the selected option even in a single select input, which will
return an empty string as its value. This is the default behavior of
selectize.js. However, the selectize input created from
selectInput(..., selectize = TRUE) will ignore the empty string
value when it is a single choice input and the empty string is not in the
choices argument. This is to keep compatibility with
selectInput(..., selectize = FALSE).
Server value
A vector of character strings, usually of length
1, with the value of the selected items. When multiple=TRUE and
nothing is selected, this value will be NULL.
See also
updateSelectInput() varSelectInput()
Other input elements:
actionButton(),
checkboxGroupInput(),
checkboxInput(),
dateInput(),
dateRangeInput(),
fileInput(),
numericInput(),
passwordInput(),
radioButtons(),
sliderInput(),
submitButton(),
textAreaInput(),
textInput(),
varSelectInput()
Examples
## Only run examples in interactive R sessions
if (interactive()) {
# basic example
shinyApp(
  ui = fluidPage(
    selectInput("variable", "Variable:",
                c("Cylinders" = "cyl",
                  "Transmission" = "am",
                  "Gears" = "gear")),
    tableOutput("data")
  ),
  server = function(input, output) {
    output$data <- renderTable({
      mtcars[, c("mpg", input$variable), drop = FALSE]
    }, rownames = TRUE)
  }
)
# demoing group support in the `choices` arg
shinyApp(
  ui = fluidPage(
    selectInput("state", "Choose a state:",
      list(`East Coast` = list("NY", "NJ", "CT"),
           `West Coast` = list("WA", "OR", "CA"),
           `Midwest` = list("MN", "WI", "IA"))
    ),
    textOutput("result")
  ),
  server = function(input, output) {
    output$result <- renderText({
      paste("You chose", input$state)
    })
  }
)
}