R Shiny - 使用 shinyjs::toggleState 和 shinyWidgets::pickerInput
R Shiny - Using shinyjs::toggleState with shinyWidgets::pickerInput
下面的应用程序包含一个标记为 Options
的单选按钮组和一个渲染的 renderUI 表达式:
- 一个输入元素
input$data
取决于
选定的按钮和
- 一个动作按钮
input$add
。
我想在用户为 input$data
选择有效值之前禁用该按钮。我并列 observe({ toggleState(id = 'add', condition = !is.null(input$data)) })
但这失败了。将 input$data
的值打印到控制台表明 pickerInput 初始化为两个单独的值 NULL
和 ""
:
NULL
[1] ""
等等 !is.null(input$data)
returns:
[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 returns 只是 [1] ""
(不是
NULL
[1] ""
启动时 returns)。我不确定这里发生了什么,我在 pickerInput 的文档中找不到与此相关的任何内容,因此我们将不胜感激。
空字符串 ''
不是 R 中的空对象
?is.null
NULL represents the null object in R: it is a reserved word.
NULL is often returned by expressions and functions whose values are
undefined.
> !is.null('')
[1] TRUE
不过 shiny::isTruthy
会解决这个问题
> isTruthy('')
[1] FALSE
下面的应用程序包含一个标记为 Options
的单选按钮组和一个渲染的 renderUI 表达式:
- 一个输入元素
input$data
取决于 选定的按钮和 - 一个动作按钮
input$add
。
我想在用户为 input$data
选择有效值之前禁用该按钮。我并列 observe({ toggleState(id = 'add', condition = !is.null(input$data)) })
但这失败了。将 input$data
的值打印到控制台表明 pickerInput 初始化为两个单独的值 NULL
和 ""
:
NULL
[1] ""
等等 !is.null(input$data)
returns:
[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 returns 只是 [1] ""
(不是
NULL
[1] ""
启动时 returns)。我不确定这里发生了什么,我在 pickerInput 的文档中找不到与此相关的任何内容,因此我们将不胜感激。
空字符串 ''
不是 R 中的空对象
?is.null
NULL represents the null object in R: it is a reserved word. NULL is often returned by expressions and functions whose values are undefined.
> !is.null('')
[1] TRUE
不过 shiny::isTruthy
会解决这个问题
> isTruthy('')
[1] FALSE