Create a select list that can be used to choose a single or multiple items from a list of values.
selectInput(
inputId,
label,
choices,
selected = NULL,
multiple = FALSE,
selectize = TRUE,
width = NULL,
size = NULL
)
selectizeInput(inputId, ..., options = NULL, width = NULL)
The input
slot that will be used to access the value.
Display label for the control, or NULL
for no label.
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.
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.
Is selection of multiple items allowed?
Whether to use selectize.js or not.
The width of the input, e.g. '400px'
, or '100%'
;
see validateCssUnit()
.
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 size
is set, it will be a box instead.
Arguments passed to selectInput()
.
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).
A select list control that can be added to a UI definition.
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.
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)
.
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
.
updateSelectInput()
varSelectInput()
Other input elements:
actionButton()
,
checkboxGroupInput()
,
checkboxInput()
,
dateInput()
,
dateRangeInput()
,
fileInput()
,
numericInput()
,
passwordInput()
,
radioButtons()
,
sliderInput()
,
submitButton()
,
textAreaInput()
,
textInput()
,
varSelectInput()
## 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)
})
}
)
}