假设您不想要一个初始值,因为它会被观察到,似乎有三种解决方案:
- 使用额外的选项,例如称为“none”,请参阅radioButtons帮助
- 使用character(0)(请参阅radioButtons帮助)
- 使用额外的actionButton并观察该按钮。
如果您不想在用户界面中模糊化额外的radioButtons选择或actionButton,请使用character(0)。
但是,当使用'character(0)'时,您可能还需要解决副作用。问题是'character(0)'将
不会将输入参数重置为NULL,因此您不能两次使用相同的选项(这可能是可取的,也可能不是)。这在以下示例程序中显示。
server <- function(input, output) {
output$uiRadioButtons <- renderUI({ radioButtons (inputId='actionId', label='action:', choices = c ('a', 'b', 'c'), selected=character(0)) })
n <- 0
observe({
actionId <- input$actionId
n <<- n+1
if (!is.null(actionId)) {
if (actionId=='a') output$action <- renderText (paste (n, "action A"))
if (actionId=='b') output$action <- renderText (paste (n, "action B"))
if (actionId=='c') output$action <- renderText (paste (n, "action C"))
output$uiRadioButtons <- renderUI({ radioButtons (inputId='actionId', label='action:', choices = c ('a', 'b', 'c'), selected=character(0)) })
} else output$action <- renderText ("actionId equals NULL")
}) }
ui <- fluidPage (
sidebarLayout(
sidebarPanel ( uiOutput('uiRadioButtons')),
mainPanel (uiOutput('action'))
) )
shinyApp (ui = ui, server = server)
这可以通过使用和观察虚拟的radioButtons来解决(尽管对于远程应用程序可能太慢)。
server <- function(input, output) {
showActions <- function() {
output$uiRadioButtons <- renderUI ({ radioButtons (inputId='actionId', label='action:', choices = c ('a', 'b', 'c'), selected=character(0)) })
}
showActions()
n <- 0
observe({
actionId <- input$actionId
n <<- n+1
if (!is.null(actionId)) {
if (actionId=='dummy') showActions ()
else {
if (actionId=='a') output$action <- renderText (paste (n, "action A"))
if (actionId=='b') output$action <- renderText (paste (n, "action B"))
if (actionId=='c') output$action <- renderText (paste (n, "action C"))
output$uiRadioButtons <- renderUI({ radioButtons (inputId='actionId', label='action:', choices = 'dummy') })
}
} else output$action <- renderText ("actionId equals NULL")
})
}
ui <- fluidPage (
sidebarLayout(
sidebarPanel (
uiOutput('uiRadioButtons')
),
mainPanel (uiOutput('action'))
)
)
shinyApp (ui = ui, server = server)
这看起来很丑,但它能正常工作。如果有人能向我展示更好的解决方案,比如将输入变量重置为NULL的方法,我会很高兴。
selected = character(0)
替代selected = NULL
。 - Hackerman