When unselecting all checkboxes of a checkboxGroupInput, observeEvent does not respond to the input change but observe does. I think it would be logical that observeEvent react to the fact that the input was cleared and for consistency with observe as well.
Here is a minimal working example of what I found.
library(shiny)
ui <- fluidPage(
fluidRow(
checkboxGroupInput('shinyCheckBox',
label = NULL,
c('One',
'Two',
'Three'))
)
)
server <- function(input, output, session){
observeEvent(input$shinyCheckBox, {
print('Shiny Checkbox observeEvent changed')
})
observe({
a <- input$shinyCheckBox
print('Shiny Checkbox observe changed')
})
}
shinyApp(ui = ui, server = server)
Hope it helps !
You need to include ignoreNULL=FALSE
in the observeEvent
statement because checkboxGroupInput
is NULL when no choices are selected.
```{r}
library(shiny)
ui <- fluidPage(
fluidRow(
checkboxGroupInput('shinyCheckBox',
label = NULL,
c('One',
'Two',
'Three'))
)
)
server <- function(input, output, session){
observeEvent(input$shinyCheckBox, {
print('Shiny Checkbox observeEvent changed')
}, ignoreNULL=FALSE)
observe({
a <- input$shinyCheckBox
print('Shiny Checkbox observe changed')
})
}
shinyApp(ui = ui, server = server)
```
Thanks for the precision !
I didn't know observeEvent had options like this.
But shouldn't checkboxGroupInput be an empty list instead of NULL then ?
To me it makes no sense that observeEvent and observe behave differently in this situation.
@EmileArseneault an empty vector IS the same as NULL. Try this: identical(c(), NULL)
You're noticing a little-known feature of observeEvent. It may be weird, but it's actually useful that they chose this as the default behaviour. Before observeEvent came into existence, a lot of my observers had if(is.null(input$x)) return()
because I had to manually check if the value is null. Thanks for observeEvent and its default value of ignoreNULL
, that's not required anymore.
For future reference: it should probably give character(0)
instead of NULL
.
observeEvent
actually uses req
and req(input$checkboxes)
should probably mean "one of these checkboxes should be checked"? I can see how it feels like a slight misfit for observeEvent though.
Most helpful comment
You need to include
ignoreNULL=FALSE
in theobserveEvent
statement becausecheckboxGroupInput
is NULL when no choices are selected.```{r}
library(shiny)
ui <- fluidPage(
fluidRow(
checkboxGroupInput('shinyCheckBox',
label = NULL,
c('One',
'Two',
'Three'))
)
)
server <- function(input, output, session){
observeEvent(input$shinyCheckBox, {
print('Shiny Checkbox observeEvent changed')
}, ignoreNULL=FALSE)
observe({
a <- input$shinyCheckBox
print('Shiny Checkbox observe changed')
})
}
shinyApp(ui = ui, server = server)
```