R блестящий: checkboxGroupInput значение
Я новичок в R и у меня есть этот код в Ui.R:
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Test 1"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput("sex", "sex", c("Men", "Women")),
textOutput("number")
),
mainPanel(
)
)
))
И этот код в 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})
})
})
Итак, я не понимаю, почему "число" не принимает значение 5, когда я проверяю оба флажка, и почему "число" не принимает значение 10, если я снимаю флажки с обоих полей?
Если бы вы могли помочь мне понять, пожалуйста.
Большое спасибо.
РЕДАКТИРОВАТЬ: как снять флажок GrouInput "динамический"?
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"))
)
)
))
И 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))
})
})
Огромное спасибо.
1 ответ
Несколько вещей, которые следует учитывать в вашем коде:
1) если выбраны как мужчина, так и женщина, то вход $sex имеет длину =2 (chr [1:2] "мужчины" "женщины"). Эта линия не будет работать.
(input$sex == "Men" & input$sex == "Women")
2) При вводе приложения init$sex равен NULL, и вы не можете использовать нуль в операторе if, как в
if (input$sex == "Men")
3) вам не нужно наблюдать за событием. renderText реагирует на ввод $sex.
Я сделал некоторые изменения в вашем коде
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)
обновить - если у вас есть больше вариантов
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)