2016-10-22 4 views
1

Ich bin neu in R, und ich habe diesen Code in Ui.R:R glänzend: checkboxGroupInput Wert

library(shiny) 

ui <- shinyUI(fluidPage(

    titlePanel("Test 1"), 

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

    mainPanel(

    ) 
) 
)) 

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

Also, ich don verstehe nicht, warum "Zahl" nicht den Wert 5 annimmt, wenn ich beide Kontrollkästchen ankreuze, und warum "Zahl" nicht den Wert 10 annimmt, wenn ich beide Kontrollkästchen deaktiviere?

Wenn Sie mir bitte helfen könnten, zu verstehen.

Vielen Dank.

BEARBEITEN: wie checkboxGrouInput "dynamisch" deaktivieren?

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

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

Danke sehr, sehr viel.

Antwort

4

Ein paar Sache in Ihrem Code zu berücksichtigen:

1), wenn sowohl männliche als auch weibliche ausgewählt sind, dann geben Sie $ Sex Länge = 2 (chr hat [1: 2] "Männer" "Frauen"). Diese Linie wird nicht funktionieren.

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

2) Bei app init Eingang $ Sex ist NULL, und Sie können eine Null in einer if-Anweisung wie in

if (input$sex == "Men") 

3) Sie brauchen nicht observeEvent nicht verwenden. renderText reagiert auf Eingabe $ sex.

Ich habe einige Änderungen an Ihrem 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 - wenn Sie mehr Optionen

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

Oh toll haben! Vielen Dank Ron für deine Erklärungen. Ich verstehe jetzt besser. Nur noch eine Frage: Ich muss ein Kästchen in der Checkbox GroupInput: Kinder hinzufügen. Wie kann ich Entscheidungen unterscheiden: Männer-Frauen/Männer-Kinder/Frauen-Kinder, wie die Länge ist die gleiche? Danke nochmal. –

+0

Siehe aktualisierten Code. Es gibt elegantere Möglichkeiten, dies zu tun, aber diese folgen den Ideen in Ihrem Code. –

+0

Vielen Dank Ron für die Hilfe. Du bist ein König. Aber sobald ich meinen Code abgeschlossen habe, habe ich immer noch ein kleines Problem mit der Abwahl der CheckboxGroupInput "dynamisch", wenn keines der Kästchen des checkboxGroupInput "Geschlecht" angekreuzt ist. Ich habe versucht "ausgewählt = NULL, FALSCH und Zeichen (0), aber keiner von ihnen funktioniert. Weißt du warum? Bitte, sehe meinen bearbeiteten Code. Vielen Dank noch einmal Ron. –

Verwandte Themen