【发布时间】:2017-06-11 09:55:18
【问题描述】:
我在 R 中摆弄一个闪亮的应用程序。该应用程序有
- 一个选择列表输入A(主要组)与可能的值A,B 和/或 C
- 一组复选框输入b(子组),它们是 由 Input A 列表中的选择动态填充:chkb a 和 chkb b 代表 A,c,d 代表 B,和/或 e,f 代表 C
- 带有映射的数据框
df
它是这样的:
我的问题是 Input b 忘记了之前未选中的复选框。所以 - 关于屏幕录制 - 值 b 必须在列表 Input A 中的每个新选择中再次取消选中。
问:如何更改以下代码,以便
- 输入 A 中的新添加列表项仍会在 输入 b 中自动检查,并且
- 之前输入 b 中未选中的值被记住;至少只要 Input A 中的相应类别没有被取消选择
代码如下:
library(shiny)
df <- data.frame(
a = rep(LETTERS[1:3], each = 2),
b = letters[1:6]
)
ui <- fluidPage(
column(6, selectInput("selectinput", "Input A", levels(df$a), multiple = T)),
column(6, checkboxGroupInput("checkinput", "Input b", NULL))
)
server <- function(input, output, session) {
observe({
allPossibleB <- df$b[df$a %in% input$selectinput]
updateCheckboxGroupInput(session,
"checkinput", "Input b",
choices = allPossibleB,
selected = setdiff(allPossibleB, NULL), # <=== previously unchecked instead NULL?
inline = TRUE
)
})
}
shinyApp(ui, server)
我尝试了几件事,但我认为不值得一提,因为我对 Shiny 和基本概念没有太多经验。也许有一种简单的方法不仅可以访问输入小部件的检查值吗?
提前感谢任何提示和帮助!
【问题讨论】: