Зафиксируйте, что выбрано в selectizeinput

#r #shiny

Вопрос:

Я пытаюсь захватить то, что мы выбрали в selectizeinput (например, если мы выберем 3, то 3 должны быть напечатаны), но здесь он продолжает печатать

 library(shiny) library(DT)  init.choices lt;- c("Choose From List or Type New Value"="")  ui lt;- fluidPage(  selectizeInput("foo", NULL,   choices=init.choices,  multiple=FALSE,  options=list(create=TRUE)) )  server lt;- function(input, output, session) {  observe({  updateSelectizeInput(session, "foo", choices=c(init.choices, c(1,2,3)), selected = 3, server=TRUE)  print(input$foo)  }) }  shinyApp(ui, server)   

Комментарии:

1. Поместите печать(ввод$foo) в другое наблюдение() ?

2. да, то же самое. Я попробовал 🙂

3. это работает на меня. Что он печатает для вас ?

4. да, понял.. Спасибо. Но я вижу, что первый отпечаток -«» . Почему?

5. Потому что изначально ничего не выбрано. Затем он проходит через ввод updateSelectizeInput и выбирается 3. Но когда вы запускаете приложение и создаете selectizeInput, там ничего не выбрано, поэтому он печатает «».

Ответ №1:

Печать неправильная, потому что вы вставляете print(input$foo) то же observe самое, что updateSelectizeInput и . Положите это в другое observe место . И если вы хотите печатать только тогда, когда оно имеет значение , а не NULL или "" , вы можете добавить req(input$foo) перед печатью.

 library(shiny) library(DT)  init.choices lt;- c("Choose From List or Type New Value"="")  ui lt;- fluidPage(  selectizeInput("foo", NULL,   choices=init.choices,  multiple=FALSE,  options=list(create=TRUE)) )  server lt;- function(input, output, session) {  observe({  updateSelectizeInput(session, "foo", choices=c(init.choices, c(1,2,3)), selected = 3, server=TRUE)  })    observe({ req(input$foo) print(input$foo) }) }  shinyApp(ui, server)