R shiny : checkboxGroupInput value
r, shiny
Solution
A few thing to consider in your code:
1) if both male and female are selected, then input$sex has length=2 (chr [1:2] "Men" "Women"). This line wont work.
(input$sex == "Men" & input$sex == "Women")
2) At app init input$sex is NULL, and you can not use a null in an if statement as in
if (input$sex == "Men")
3) you dont need observeEvent. renderText is reactive to input$sex.
I made some changes to your code
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Test 1"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput(inputId = "sex", label = "sex",choices = c("Men", "Women")),
textOutput("number")
),
mainPanel()
)
))
server <- shinyServer(function(session, input, output) {
output$number<-renderText({
if (is.null(input$sex) ){return(10)}
if (length(input$sex) ==1){
if (input$sex == "Men"){
s<-1
} else if (input$sex == "Women"){
s<-2
}
} else{
return(5)
}
return(as.numeric(s))
})
})
shiny::shinyApp(ui, server)
update - if you have more options
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Test 1"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput(inputId = "sex", label = "sex",choices = c("Men", "Women", "Children")),
textOutput("number")
),
mainPanel()
)
))
server <- shinyServer(function(session, input, output) {
output$number<-renderText({
if (is.null(input$sex) ){return(10)}
men <- "Men" %in% input$sex
women <- "Women" %in% input$sex
children <- "Children" %in% input$sex
if (men & women & children){
s <- 8
} else if (men & women){
s <- 5
} else if (men){
s <-1
} else if (women){
s <-2
} else if (children) {
s <- 3
}
return(as.numeric(s))
})
})
shiny::shinyApp(ui, server)
Problem
I'm new to R and I have this code in Ui.R : ``` library(shiny) ui <- shinyUI(fluidPage( titlePanel("Test 1"), sidebarLayout( sidebarPanel( checkboxGroupInput("sex", "sex", c("Men", "Women")), textOutput("number") ), mainPanel( ) ) )) ``` And this code in Server.R : ``` server <- shinyServer(function(session, input, output) { observeEvent(input$sex, { if (input$sex == "Men"){s<-1} number<-as.numeric(s) if (input$sex == "Women"){s<-2} number<-as.numeric(s) if (input$sex == "Men" & input$sex == "Women"){s<-5} number<-as.numeric(s) if (is.null(input$sex)) {s<-10} number<-as.numeric(s) output$number<-renderText({number}) }) }) ``` So, I don't understand why "number" does not take value 5 when I check both check boxes, and why "number" does not take value 10 if I uncheck both boxes ? If you could help me to understand please. Thank you very much. EDIT : how to deselect checkboxGrouInput "dynamic" ? ``` library(shiny) ui <- shinyUI(fluidPage( titlePanel("Test 1"), sidebarLayout( sidebarPanel( checkboxGroupInput(inputId = "sex", label = "sex",choices = c("Men", "Women", "Children")), textOutput("number") ), mainPanel( checkboxGroupInput(inputId = "dynamic", label = "", choices = list("Answer 1"="01", "Answer 2"="02", "Answer 3"="03", "Answer 4"="04", "Answer 5"="05", "Answer 6"="06", "Answer 7"="07", "Answer 8"="08", "Answer 9"="09", "Answer 10"="10", "Answer 11"="11", "Answer 12"="12")) ) ) )) ``` And Server.R : ``` server <- shinyServer(function(session, input, output) { output$number<-renderText({ if (is.null(input$sex) ){return(10) updateCheckboxGroupInput(session,"dynamic",selected=character(0))} men <- "Men" %in% input$sex women <- "Women" %in% input$sex children <- "Children" %in% input$sex if (men & women & children){ s <- 8 updateCheckboxGroupInput(session,"dynamic", selected=list("01","02","03","04","05","06", "07","08","09","10","11","12")) } else if (men & women){ s <- 5 updateCheckboxGroupInput(session,"dynamic", selected=list("01","02","03","04","05","06","07","08")) } else if (men){ s <-1 updateCheckboxGroupInput(session,"dynamic", selected=list("01","02","03","04")) } else if (women){ s <-2 updateCheckboxGroupInput(session,"dynamic", selected=list("05","06","07","08")) } else if (children) { s <- 3 updateCheckboxGroupInput(session,"dynamic", selected=list("09","10","11","12")) } return(as.numeric(s)) }) }) ``` Thank you very very much.