来自文档:
radioButtons(inputId,label,choices,selected = NULL,inline = FALSE, width = NULL)
参数
已选择最初选择的值(如果未指定,则默认为第一个值)
但是,你能指定selected
参数,以便渲染的radioButtons没有选择初始值吗?此初始值的输出可以是空字符串(""
)。在下面的示例中,应用程序运行时不应选择“a”和“b”。
library(shiny)
runApp(
list(
ui = shinyUI(
fluidPage(
radioButtons("test","test",choices=c("a","b"),selected = NULL),
verbatimTextOutput("value")
)
), server = shinyServer(function(input, output,session) {
output$value <- renderText(input$test)
})
)
)
更新
正如Hackerman所说,selected = character(0)
可以解决问题。
答案 0 :(得分:7)
selected
的问题是,如果未指定,则默认为第一个值。但您可以使用以下方法解决此问题:
selected = character(0)
另一种方法是提供默认选项,例如Nothing Selected
radioButtons("test","test",choices=c("Nothing Selected"="","a"="a","b"="b"),selected = NULL),
答案 1 :(得分:1)
假设您不想要初始值,因为它会被观察到,似乎有3个解决方案:
如果您不想使用额外的radioButtons选项或actionButton来模糊您的用户界面,请使用字符(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 (
# radioButtons (inputId='objectId', label='selct object:', choices = c ('o1', 'o2', 'o3'), inline = TRUE),
uiOutput('uiRadioButtons')
),
mainPanel (uiOutput('action'))
)
)
shinyApp (ui = ui, server = server)
它看起来很难看,但它很有效,我很高兴,如果有人能给我看一个更好的解决方案,例如一种将输入变量重置为NULL的方法。