首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R shiny : checkboxGroupInput值

R shiny : checkboxGroupInput值
EN

Stack Overflow用户
提问于 2016-10-22 22:22:58
回答 1查看 14.8K关注 0票数 3

我是R的新手,我在Ui.R中有这样的代码:

代码语言:javascript
复制
library(shiny)

ui <- shinyUI(fluidPage(

  titlePanel("Test 1"),

  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("sex", "sex", c("Men", "Women")),
      textOutput("number")
   ),

   mainPanel(

   )
  )
))

Server.R中的代码如下:

代码语言:javascript
复制
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“动态”?

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)) 
   })
 })

非常非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 23:19:36

在你的代码中需要考虑几件事:

1)如果同时选择了男性和女性,则输入$sex有length=2 (chr 1:2“男性”“女性”)。这条线路不能用。

代码语言:javascript
复制
(input$sex == "Men" & input$sex == "Women")

2)在应用程序初始化时,输入$性别为NULL,不能在if语句中使用null,如下所示

代码语言:javascript
复制
if (input$sex == "Men") 

3)你不需要observeEvent。renderText是对输入$性别的反应。

我对你的代码做了一些修改

代码语言:javascript
复制
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)

更新-如果您有更多选择

代码语言:javascript
复制
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)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40193240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档