R Блестящий — использование shinyjs :: переключение с помощью shinyWidgets ::pickerInput

#r #shiny #shinyjs

#r #блестящий #shinyjs

Вопрос:

Приложение ниже содержит группу переключателей с надписью Options и выражение renderUI, которое отображает:

  1. элемент ввода input$data , который зависит от значения выбранной кнопки и
  2. кнопка actionButton input$add .

Я хотел бы отключить кнопку до тех пор, пока пользователь не выберет допустимое значение для input$data . Я привязал observe({ toggleState(id = 'add', condition = !is.null(input$data)) }) , но это не удается. Вывод значения input$data на консоль показывает, что pickerInput инициализируется двумя отдельными значениями NULL и "" :

 NULL
[1] ""
  

и так !is.null(input$data) возвращает:

 [1] FALSE
[1] TRUE
  

Вместо просто FALSE .

Приложение:

 library(shiny)
library(shinyjs)
library(shinyWidgets)


ui <- fluidPage(shinyjs::useShinyjs(),

                prettyRadioButtons('opt', label = 'Options', choices = c('state', 'file', 'letters')),

                uiOutput('upload')

)

server <- shinyServer(function(input, output, session) {

  output$upload = renderUI({

    tagList(
      switch(input$opt, 
           'state' = pickerInput('data', 'Choose a state', 
                                 choices = state.name, 
                                 options = list(title = "States..."),
                                 choicesOpt = list(subtext = seq_along(state.name))
                                 ), 

           'file' = fileInput('data', 'Select file'), 

           'letters' = pickerInput('data', 'Choose a letter', 
                                   choices = LETTERS, 
                                   options = list(title = "Letters..."),
                                   choicesOpt = list(subtext = seq_along(LETTERS))
                                   )
           ), 

      actionButton('add', 'Add')

      )

  })

  observe({

    print(input$data) # pickerInput initializes with two values
    toggleState(id = 'add', condition = !is.null(input$data))

  })


})

shinyApp(ui, server)
  

Кроме того, когда вы переключаете переключатель с выбора по умолчанию state на file , а затем обратно на state , pickerInput возвращает только [1] "" (не

 NULL
[1] ""
  

которое он возвращает при запуске). Я не уверен, что здесь происходит, и я не смог найти ничего, относящегося к этому, в документации для pickerInput, поэтому буду признателен за любую помощь.

Ответ №1:

Пустая строка '' не является нулевым объектом в R

?is.null

NULL представляет нулевой объект в R: это зарезервированное слово. Выражения и функции, значения которых не определены, часто возвращают значение NULL.

 > !is.null('')
[1] TRUE
  

Однако shiny::isTruthy это решит

 > isTruthy('')
[1] FALSE
  

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

1. Большое вам спасибо! Я знал разницу между NULL и "" , но isTruthy() для меня это ново.