我有一个checkboxGroupInput,但我希望有checkboxInput行为。我希望有独立的反应函数,只有当您(联合国)勾选a
或b
时才会激活。这可以通过单独checkboxInput
s轻松实现,但不能在checkboxGroupInput
内完成。
ui <- shinyUI(pageWithSidebar(
headerPanel("checkboxGroupInput"),
sidebarPanel(
checkboxGroupInput('sources',
label='Sources',
choices=list('a'='a',
'b'='b')),
checkboxInput('a',
'a'),
checkboxInput('b',
'b')
),
mainPanel(
# empty
)
))
server <- shinyServer(function(input, output) {
thingy <- reactive({
return('a' %in% input$sources)
})
observeEvent(thingy(), {
print("I'm here (a+b)")
})
observeEvent(input$a, {
print("I'm here (a only)")
})
observeEvent(input$b, {
print("I'm here (b only)")
})
})
shinyApp(ui=ui,server=server)
我在上面的示例中尝试的是存储布尔值a
是否在checkboxGroupInput
中。即使值保持TRUE
(即重复点击b
),thingy()
仍会被激活。
答案 0 :(得分:1)
您可以将每个复选框存储在reactiveValue
中。见代码。
ui <- shinyUI(pageWithSidebar(
headerPanel("checkboxGroupInput"),
sidebarPanel(
checkboxGroupInput('sources',
label='Sources',
choices=list('a'='a',
'b'='b')),
checkboxInput('a',
'a'),
checkboxInput('b',
'b')
),
mainPanel(
# empty
)
))
server <- shinyServer(function(input, output) {
rv <- reactiveValues(a=FALSE, b=FALSE)
observe( {
is.a <- 'a' %in% input$sources
if ( rv$a != is.a){
rv$a <- is.a
}
is.b <- 'b' %in% input$sources
if ( rv$b != is.b){
rv$b <- is.b
}
})
# thingy <- reactive({
# return('a' %in% input$sources)
# })
# observeEvent(thingy(), {
# print("I'm here (a+b)")
# })
#
observeEvent(rv$a, {
print("a only")
})
observeEvent(rv$b, {
print("b only")
})
observeEvent(input$a, {
print("I'm here (a only)")
})
observeEvent(input$b, {
print("I'm here (b only)")
})
})
shinyApp(ui=ui,server=server)