#r #shiny #shinyjs
#r #блестящий #shinyjs
Вопрос:
Приложение ниже содержит группу переключателей с надписью Options
и выражение renderUI, которое отображает:
- элемент ввода
input$data
, который зависит от значения выбранной кнопки и - кнопка 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()
для меня это ново.