Принудительно не выбирать по умолчанию в selectInput()
В документации Shiny упоминается, что для selectInput()
:
selected
Значение (или, если не было указано, заголовка) элемента навигации, которое должно быть выбрано по умолчанию. Если NULL, будет выбрана первая навигация.
Что если по умолчанию я не хочу выбирать какое-либо значение из списка выбора?
На самом деле мое значение select выбирается по умолчанию, а остальная часть приложения выполняется автоматически. Но я не хочу выбирать какое-либо значение изначально. Что я должен предоставить selected
аргументу в selectInput()
чтобы сделать это?
Действительно, я не хочу, чтобы что-то выбиралось автоматически. Я использовал код ниже, но все же он выбирает первое доступное значение из списка. Я хочу, чтобы по умолчанию выбора не было, поэтому пользователь может выбрать любой вариант.
output$Choose_App <- renderUI({
selectInput("app",
"Select App:",
choices = as.character(mtrl_name),
selected = NULL ,
multiple = FALSE
)
})
Просматривая документацию, я заметил, что выбор может быть пустым, только если я выбрал multiple=TRUE
. Это правильно?
Когда я изменил на multiple=TRUE
, то по умолчанию он не выбирается, что я и хочу. Но, к сожалению, прежде чем сделать какой-либо выбор, я также получаю следующее сообщение об ошибке:
ERROR: bad 'file' argument
Кто-нибудь знает об этом, если я делаю что-то не так? Но если я выберу этот файл, то ошибка исчезнет.
![enter image description here]()
Я использую следующий код для этого:
# server.R
setwd("/opt/shiny-server/samples/sample-apps/P-Dict_RDS2")
mtrl_name <- try(system("ls | grep -i .rds", intern = TRUE))
shinyServer(function(input, output) {
# First UI input (Service column) filter clientData
output$Choose_Molecule <- renderUI({
selectInput("molecule",
"Select Molecule:",
choices = as.character(mtrl_name),
selected = input$molecule,
multiple = TRUE
)
})
Ответы
Ответ 1
Вы можете использовать вход selectize вместо входа select, с некоторыми пользовательскими параметрами выбора, чтобы исходный выбор был пустым. Пример был предоставлен в галерее Shiny. В частности, см. Пример # 6.
# make sure you have shiny >= 0.9.1
selectizeInput(
'e6', '6. Placeholder', choices = state.name,
options = list(
placeholder = 'Please select an option below',
onInitialize = I('function() { this.setValue(""); }')
)
)
BTW, для ошибки "ERROR: bad 'file' argument"
, я не думаю, что кто-то может помочь вам, не видя исходного кода вашего приложения, и это может быть отдельный вопрос.
Ответ 2
Столкнулся с аналогичной проблемой. Решение, которое я нашел, основано на ответе @MKa. Вы не хотите устанавливать multiple = T, если ваш код не может обрабатывать несколько значений. Я предлагаю:
selectInput("molecule",
"Select Molecule:",
choices = c("",as.character(mtrl_name)),
selected = NULL,
multiple = F
)
И для получения выбранного значения:
if(!is.null(input$molecule))
{
if(nchar(input$molecule)>1)
{
#do your thing..
}
}
Исправлена проблема. Дайте мне знать, если вы нашли лучшее решение.
Ответ 3
Я думаю, вы можете обойти это, добавив пустую строку в ваш список выбора:
selectInput("app",
"Select App:",
choices = c("", as.character(mtrl_name)),
selected = NULL,
multiple = FALSE)
Ответ 4
@Yihui Xie ответ требует selectInput(..., selectize = TRUE)
. Если вы хотите selectize = FALSE
, вы все равно можете добиться аналогичного эффекта следующим образом.
Это не задокументировано:
selected
Первоначально выбранное значение (или несколько значений, если multiple = TRUE
). Если не указан, то по умолчанию используется первое значение для списков с одним выбором, а для множественных списков - нет значений.
Но для списков с одним выбором, если вы можете использовать selectize = FALSE, size = 4
(любой selectize = FALSE, size = 4
non- NULL
будет работать), тогда вы можете установить selected = FALSE
чтобы не выбирать по умолчанию.
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
mainPanel(
uiOutput("Choose_Molecule")
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
# First UI input (Service column) filter clientData
output$Choose_Molecule <- renderUI({
selectInput("molecule",
"Select Molecule:",
choices = rownames(mtcars),
selected = FALSE,
multiple = FALSE
, selectize = FALSE, size = 4 ##needed for 'selected = FALSE' to work
)
})
}
# Run the application
shinyApp(ui = ui, server = server)
![enter image description here]()