2016-10-22 9 views
1

私はRに新たなんだと私はUi.Rでこのコードを持っている:私ドン、そうR光沢:checkboxGroupInput値

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}) 
    }) 
    }) 

library(shiny) 

ui <- shinyUI(fluidPage(

    titlePanel("Test 1"), 

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

    mainPanel(

    ) 
) 
)) 

そしてServer.Rでこのコードを両方のチェックボックスをオンにした場合、なぜ「数値」が5にならないのか、両方のチェックボックスをオフにすると「数値」が10にならないのはなぜですか?

ご理解いただけたら助かります。

ありがとうございました。

EDIT: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")) 
     ) 
    ) 
)) 

そして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)) 
    }) 
}) 

非常にありがとうございました。

答えて

4

あなたのコードに考慮すべきいくつかの事: "男性" "女性"):

1)男性と女性の両方が選択されている場合は、その後、入力された$のセックスは、長さ= 2(CHR [2 1]を持っています。この行は動作しません。アプリの初期化入力$のセックスで

(input$sex == "Men" & input$sex == "Women") 

2)がNULLである、とあなたがobserveEventを必要といけない

if (input$sex == "Men") 

3)のようにif文にはnullを使用することはできません。 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) 
+0

!あなたの説明のためにロンに感謝します。私は今よくよく理解する。ちょうどもう1つの質問:checkboxGroupInput:childrenに1つのボックスを追加する必要があります。どのように私は選択肢を区別することができます:男性 - 女性/男性 - 子供/女性 - 子供の長さは同じですか?ありがとうございました。 –

+0

更新されたコードを参照してください。これを行うもっとエレガントな方法がありますが、これはコード内のアイデアに従います。 –

+0

Ronさんを助けてくれてありがとう。あなたは王様です。しかし、コードを完成したら、checkboxGroupInput "sex"のチェックボックスがチェックされていなければ、checkboxGroupInput "dynamic"の選択を解除するのに少し問題があります。私は "selected = NULL、FALSE、character(0)を試しましたが、どれも動作しません。なぜですか? –

関連する問題