我是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})
})
})所以,我不明白为什么当我选中这两个复选框时,"number“没有取值5,为什么如果我取消选中这两个复选框,"number”不取值10呢?
如果你能帮我理解的话。
非常感谢。
编辑:如何取消选择checkboxGrouInput“动态”?
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))
})
})非常非常感谢。
发布于 2016-10-22 23:19:36
在你的代码中需要考虑几件事:
1)如果同时选择了男性和女性,则输入$sex有length=2 (chr 1:2“男性”“女性”)。这条线路不能用。
(input$sex == "Men" & input$sex == "Women")2)在应用程序初始化时,输入$性别为NULL,不能在if语句中使用null,如下所示
if (input$sex == "Men") 3)你不需要observeEvent。renderText是对输入$性别的反应。
我对你的代码做了一些修改
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)https://stackoverflow.com/questions/40193240
复制相似问题