2016-10-22 3 views
1

Я новичок в R и у меня есть этот код в Ui.R:R блестящая: значение checkboxGroupInput

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, если снять галочку с обоих полей?

Если вы могли бы помочь мне разобраться, пожалуйста.

спасибо.

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 [1: 2] "Мужчины", "Женщины"). Эта строка не будет работать.

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

2) В приложение инициализации ввода $ секса NULL, и вы не можете использовать нуль в, если заявление, как в

if (input$sex == "Men") 

3) вам не нужно observeEvent. 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

О великий! Большое спасибо Рон за ваши объяснения. Теперь я лучше понимаю. Еще один вопрос: я должен добавить одну ячейку в поле checkboxGroupInput: children. Как я могу отличить выбор: мужчины-женщины/мужчины-дети/женщины-дети, как длина одинакова? Еще раз спасибо. –

+0

См. Обновленный код. Есть более элегантные способы сделать это, но это следует за идеями в вашем коде. –

+0

Большое спасибо Рон за помощь. Ты король. Но как только я закончил свой код, у меня все еще есть небольшая проблема с отменой выбора checkboxGroupInput «dynamic», когда ни один из полей checkboxGroupInput «sex» не проверен. Я попробовал "selected = NULL, FALSE и character (0), но никто из них не работает. Вы знаете, почему? См. Мой отредактированный код. Еще раз спасибо Рон. –

Смежные вопросы