Подтвердить что ты не робот

Принудительно не выбирать по умолчанию в 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
           )
        })
4b9b3361

Ответ 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