2016-10-20 4 views
0

Интересно, почему все мои флажки не отмечены этим кодом?R shiny updateCheckboxGroupInput не работает должным образом

У меня есть 1 checkboxGroupInput с именем «county» с 3 флажками и еще один с именем «dynamic» с 33 флажками. И мне интересно, почему, когда я проверяю два или три флажка «county» checkboxGroupInput, зависимые флажки в «динамическом» флажкеGroupInput не проверяются. Он работает хорошо, только если один флажок установлен.

Большое спасибо за помощь.

Это Server.R:

observeEvent(input$dynamic_county, { 
if(is.element((input$dynamic_county),("South"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("02","03","05","06","09","13","16","17","18","21","28","29", 
"32"))}}) 

observeEvent(input$dynamic_county, { 
if(is.element((input$dynamic_county),("North"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("01","04","07","08","10","11","12","19","22","23","24","25","26", 
"27","30","31","33"))}}) 

observeEvent(input$dynamic_county, { 
if(is.element((input$dynamic_county),("East"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("14","15","20"))}}) 

Еще раз спасибо.

@ Warmoverflow, спасибо за предложение, но он не работает, я попытался это:

observeEvent(input$dynamic_county, { 
if(is.element((input$dynamic_county),("South"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("02","03","05","06","09","13","16", 
"17","18","21","27","28","29","32"))} 

if(is.element((input$dynamic_county),("North"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("01","04","07","08","10","11","12","19", 
"22","23","24","25","26","27","30","31","33"))} 

if(is.element((input$dynamic_county),("East"))) 
{updateCheckboxGroupInput(session, inputId = "dynamic", selected = 
list("14","15","20"))} 
    }) 

И я попробовал это тоже:

observeEvent(input$dynamic_county, { 
ifelse((is.element((input$dynamic_county), 
("South"))),updateCheckboxGroupInput(session, inputId = "dynamic", 
selected = list("02","03","05","06","09","13","16", 
"17","18","21","27","28","29","32")), 


ifelse((is.element((input$dynamic_county), 
("North"))),updateCheckboxGroupInput(session, inputId = "dynamic", 
selected = list("01","04","07","08","10","11","12","19", 
"22","23","24","25","26","27","30","31","33")), 

ifelse((is.element((input$dynamic_county), 
("East"))),updateCheckboxGroupInput(session, inputId = "dynamic", 
selected = list("14","15","20")), 
updateCheckboxGroupInput(session, inputId = "dynamic",selected = 
NULL))))}) 

Если я проверяю 2 или 3 проверки коробки, выполняется только один из них.

У вас есть идея о происхождении проблемы, пожалуйста?

Еще раз спасибо.

EDIT:

я понял, что dynamic_choices для маркировки, поэтому я включил свои окончательные метки, но он не работает. Я так разочарован, что понял, что не понял. Вот что я сделал:

library(shiny) 
library(stringr) 

dynamic_choices = c("01. Bélep", "02. Boulouparis", "03. Bourail", 
        "04. Canala", "05. Dumbéa", "06. Farino", 
        "07. Hienghène", "08. Houaïlou", "09. Ile des Pins", 
        "10. Kaala Gomen", "11. Koné", "12. Koumac", 
        "13. La Foa", "14. Lifou", "15. Maré", 
        "16. Moindou", "17. Mont Dore", "18. Nouméa", 
        "19. Ouégoa", "20. Ouvéa", "21. Païta", 
        "22. Poindimié", "23. Ponérihouen", "24. Pouébo", 
        "25. Pouembout", "26. Poum", "27. Poya", 
        "28. Sarraméa", "29. Thio", "30. Touho", "31. Voh", 
        "32. Yaté", "33. Kouaoua") 

selection = list("Province Nord"=c("01. Bélep", "04. Canala", 
       "07. Hienghène", "08. Houaïlou", "10. Kaala Gomen", 
       "11. Koné", "12. Koumac", "19. Ouégoa", "22. Poindimié", 
       "23. Ponérihouen", "24. Pouébo", "25. Pouembout", 
       "26. Poum", "27. Poya", "30. Touho", "31. Voh", 
       "33. Kouaoua"), 
        "Province Sud"=c("02. Boulouparis", "03. Bourail", 
       "05. Dumbéa", "06. Farino", "09. Ile des Pins", 
       "13. La Foa", "16. Moindou", "17. Mont Dore", 
       "18. Nouméa", "21. Païta", "28. Sarraméa", 
       "29. Thio", "32. Yaté"), 
        "Province des Iles Loyauté"=c("14. Lifou", 
       "15. Maré","20. Ouvéa")) 

ui <- shinyUI(fluidPage(

    titlePanel("Update CheckboxGroupInput"), 

    sidebarLayout(
    sidebarPanel(
     checkboxGroupInput("dynamic_provinces", "Provinces", c("Province 
        Nord", "Province Sud", "Province des Iles Loyauté")), 
     checkboxGroupInput("dynamic", "Communes", dynamic_choices) 
    ), 

    mainPanel(
    ) 
) 
)) 

И код Server.R:

server <- shinyServer(function(session, input, output) { 

    observeEvent(input$dynamic_provinces, { 
    selected = c() 

    for (s in input$dynamic_provinces) { 
     selected = c(selected, selection[[s]]) 
    } 
     if (is.null(selected)) { 
     selected = character(0) 
    } 
    updateCheckboxGroupInput(session, "dynamic", selected = selected) 
    }, ignoreNULL = FALSE) 

}) 

Большое спасибо.

+0

Вместо того, чтобы иметь три элемента наблюдения, у вас должен быть только один и поместить в него все операторы if. –

+0

Основная проблема заключается в том, что при проверке нескольких полей в первой группе вам необходимо объединить все соответствующие параметры во второй группеboxbox вместе. См. Мой ответ –

ответ

0

Вот рабочий пример. Например, когда вы выбираете «Юг» и «Север», вам нужно выбрать соответствующие поля для обоих. Код в вашем вопросе выбирает только поля, соответствующие одному из них, поэтому проблема.

Вам также необходимо установить ignoreNULL в FALSE для observeEvent, иначе он не получит событие, когда вы очистите все поля.

library(shiny) 
library(stringr) 

dynamic_choices = c(1:33) 
dynamic_choices = str_pad(as.character(dynamic_choices), 2, side="left", pad="0") 
selection = list("South"=c("02","03","05","06","09","13","16","17","18","21","28","29","32"), 
       "North"=c("01","04","07","08","10","11","12","19","22","23","24","25","26","27","30","31","33"), 
       "East"=c("14","15","20")) 

ui <- shinyUI(fluidPage(

    titlePanel("Update CheckboxGroupInput"), 

    sidebarLayout(
     sidebarPanel(
     checkboxGroupInput("county", "County", c("South", "North", "East")), 
     checkboxGroupInput("dynamic", "Dynamic", dynamic_choices) 
    ), 

     mainPanel(
    ) 
    ) 
)) 

server <- shinyServer(function(session, input, output) { 

    observeEvent(input$county, { 
    selected = c() 

    for (s in input$county) { 
     selected = c(selected, selection[[s]]) 
    } 
    # This is needed due to a bug in Shiny, see https://github.com/rstudio/shiny/issues/831 
    if (is.null(selected)) { 
     selected = character(0) 
    } 
    updateCheckboxGroupInput(session, "dynamic", selected = selected) 
    }, ignoreNULL = FALSE) 

}) 

shinyApp(ui = ui, server = server) 
+0

Большое спасибо за помощь Warmoverflow. К сожалению, когда я копирую свой ответ в свою R-Studio, ничего не происходит, когда я проверяю один или несколько полей «графства». Я не знаю почему. –

+0

Какие версии R и Shiny вы используете? Также попробуйте перезапустить RStudio или компьютер. Я проверил код на двух компьютерах, и оба они работают. –

+0

Вы были правы Warmoverflow, я перезапустил R-Studio, и все в порядке. Большое спасибо за ваш код, это прекрасно. Я лучше понимаю, как это работает сейчас. И спасибо, что тоже ответили на мои другие темы. Имейте очень хороший день. –