【发布时间】:2016-10-20 12:51:13
【问题描述】:
我想知道为什么我所有的复选框都没有用这段代码选中?
我有 1 个名为“county”的 checkboxGroupInput,其中有 3 个复选框和另一个 命名为“动态”,带有 33 个复选框。而且我想知道为什么,当我选中“县”checkboxGroupInput的两个或三个复选框时,“动态”checkboxGroupInput中的依赖复选框没有选中。只有选中一个框才能正常工作。
非常感谢您的帮助。
这是 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"))}})
再次感谢您。
@Waroverflow,谢谢你的建议,但它不起作用,我试过这个:
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 个复选框,则只执行其中一个。
请问您对问题的根源有什么想法吗?
再次非常感谢您。
编辑:
我知道 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)
})
非常感谢。
【问题讨论】:
-
你应该只有一个
observeEvent而不是三个observeEvent并将所有 if 语句放在里面。 -
主要问题是,当您选中第一组中的多个框时,您需要将第二个复选框组中的所有相应选项组合在一起。看我的回答