Как блестящий переназначает ввод после вызова updateSelectInput?

#r #shiny

#r #shiny

Вопрос:

У меня есть следующий код сервера, который возвращает ошибку «попытка выбрать менее одного элемента в get1index»

 server <- function(input, output, session) {
  observeEvent(input$search, {
  ....
  enable("show_term")
  updateSelectInput(session, "show_term",
                    choices = list_of_terms, selected = list_of_terms[1])
  
  unique_words = unique(extended.dictionary[[which(list_of_terms == input$show_term)]][,c("word", "abbr")])
  
  ...
  })}
  
  
 

Ошибка вызвана тем, что input$show_term равно "" и в нем нет такого элемента list_of_term . Это означает, что updateSelectInput не переназначается значение для input$show_term .

Однако, когда я помещаю unique_words under output$raw_dic = renderTable(...) , он работает просто отлично.

 server <- function(input, output, session) {
  observeEvent(input$search, {
  ....
  enable("show_term")
  updateSelectInput(session, "show_term",
                    choices = list_of_terms, selected = list_of_terms[1])

  output$raw_dictionary = renderTable(colnames = FALSE, striped = TRUE,
     {if (!(collected.data[[which(list_of_terms == input$show_term)]] %in%
                                                               c("No papers", "No matches"))){
      unique_words = unique(extended.dictionary[[which(list_of_terms == input$show_term)]][,c("word", "abbr")])
      collected.chuncks = collected.data[[which(list_of_terms == input$show_term)]]}})
  
  ...
  })}
 

Итак, во втором случае in вычисляет which(list_of_terms == input$show_term) и есть input$show_term равно list_of_terms[1] .

Здесь я не понимаю логики процесса переназначения. Кто-нибудь может мне это объяснить?

ОБНОВЛЕНИЕ: полный код приложения shiny размещен на GitHub (часть проблемы находится в app.R строках 342-355): https://github.com/Dobrokhotov1989/Abbrevimate

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

1. Пожалуйста, предоставьте MRE, то есть полное, минимально работающее приложение shiny, чтобы мы могли воспроизвести поведение. Спасибо!

2. Вы убедились, что на самом деле что-то показано output$raw_dictionary ? Ошибки в render функциях не останавливают работу всего приложения, в соответствующем выводе просто ничего не отображается

3. @starja, я добавил ссылку на репозиторий GitHub с полным кодом. Что касается output$raw_dictionaty , он отлично работает как с unique_words = ... , так и без. На самом деле, unique_words это ничего не добавляет к output$raw_dictionary . Удивительно для меня, which(list_of_terms == input$show_term) как-то по-другому оценивается, когда это не output$raw_dictionary приводит к упомянутой ошибке.