如何访问/记住闪亮中未选中的值?

2024-05-04

我正在摆弄 R 中的闪亮应用程序。该应用程序有

  • 选择列表Input A(主要组)具有可能的值 A、B 和/或C
  • 一组复选框Input b(子群),它们是 通过选择动态填充Input A列表:chkb a 和 chkb b 代表 A,c,d 代表 B,和/或 e,f 代表 C
  • 一个数据框df与映射

它看起来是这样的:

我的问题是Input b忘记了之前未选中哪些复选框。所以 - 关于屏幕录制 - 值b列表中的每个新选择都必须再次取消选中Input A.

问:我如何更改以下代码,以便

  1. 新增列出项目来自Input A自动检查 in Input b, and
  2. 之前未经检查的值来自Input b are 记住了;至少只要对应的类别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 和底层概念没有太多经验。也许有一种简单的方法不仅可以访问输入小部件的检查值?

预先感谢您的任何提示和帮助!


你可以使用reactiveValues()记住检查的值。

我对命名列表进行了编辑以存储复选框的信息。如果您打算选择,这是必要的input A按字母顺序排列,..

checked <- as.list(rep(T, length(df$b)))
names(checked) <- df$b

在应用程序内,您将必须使用isolate() as the input$selectinput更新速度快于input$checkinput由于某种原因,这会导致选择逻辑出现问题。所以我们只想在发生变化时进行更新input$checkinput。是的,我使用 for 循环来更新(未)检查值的列表:)。

  global <- reactiveValues(checked = checked)

  observe({
    input$checkinput
    isolate({
      if(!is.null(input$checkinput)){
        possible <- as.character(df$b[df$a %in% input$selectinput])
        for(nr in 1:length(possible)){
          global$checked[[possible[nr]]] <- (possible %in% input$checkinput)[nr]
        }
      }
    })
  })

完整的应用程序将是:

library(shiny)

df <- data.frame(
  a = rep(LETTERS[1:3], each = 2), 
  b = letters[1:6]
)

checked <- as.list(rep(T, length(df$b)))
names(checked) <- df$b


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) {
  global <- reactiveValues(checked = checked)

  observe({
    input$checkinput
    isolate({
      if(!is.null(input$checkinput)){
        possible <- as.character(df$b[df$a %in% input$selectinput])
        for(nr in 1:length(possible)){
          global$checked[[possible[nr]]] <- (possible %in% input$checkinput)[nr]
        }
      }
    })
  })

  observe({
    allPossibleB <- df$b[df$a %in% input$selectinput]
    updateCheckboxGroupInput(session, 
                             "checkinput", "Input b",
                             choices = allPossibleB,
                             selected = df$b[unlist(global$checked)], # <=== previously unchecked instead NULL?
                             inline = TRUE
    )
  })
}

shinyApp(ui, server)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问/记住闪亮中未选中的值? 的相关文章

随机推荐