Shining updateCheckboxInputGroup

Shining updateCheckboxInputGroup,r,shiny,R,Shiny,我在updateCheckboxGroupInput方面遇到了问题,因为我没有(及时)更新输入以便我的后续观察者做出反应 在实验中我发现了一些让我困惑的结果,我希望有人能启发我。以下两个代码段都是函数帮助中提供的代码的变体 ui <- fluidPage( p("The first checkbox group controls the second"), checkboxGroupInput("inCheckboxGroup", "Input checkbox",

我在updateCheckboxGroupInput方面遇到了问题,因为我没有(及时)更新输入以便我的后续观察者做出反应

在实验中我发现了一些让我困惑的结果,我希望有人能启发我。以下两个代码段都是函数帮助中提供的代码的变体

ui <- fluidPage(
  p("The first checkbox group controls the second"),
  checkboxGroupInput("inCheckboxGroup", "Input checkbox",
                     c("Item A", "Item B", "Item C")),
  checkboxGroupInput("inCheckboxGroup2", "Input checkbox 2",
                     c("Item A", "Item B", "Item C"))
)

server <- function(input, output, session) {
  observeEvent({input$inCheckboxGroup},{
  print(input$inCheckboxGroup2)
  x <- input$inCheckboxGroup

  # Can use character(0) to remove all choices
  if (is.null(x))
   x <- character(0)

  # Can also set the label and select items
  updateCheckboxGroupInput(session, "inCheckboxGroup2",
                           label = paste("Checkboxgroup label", length(x)),
                           choices =  c("Item A", "Item B", "Item C"),
                           selected = x
  )
  print(input$inCheckboxGroup2)
  })
}


shinyApp(ui, server)

ui它不特定于复选框输入。这也不是一个bug,尽管它看起来肯定是错误的行为。我不会深入讨论细节,这个答案可能不会让您满意,因为它是一个非常TLDR,但本质上,当您调用update函数时,它不会立即发生,而是在下一次刷新时发生。您告诉shiny更新输入,然后您正在打印输入,但更新尚未发生。我同意这是不直观的,有时它很烦人,因为你想能够使用相同的价值,你刚刚更新。我很久以前就向Shinny提交了一个问题,所以看看是否有办法控制这种行为,如果我找到了,我会添加一个链接


编辑:我错了,我没有提交一个bug,但我在2年前在闪亮的google小组讨论过这个问题。

它不是特定于复选框输入的。这也不是一个bug,尽管它看起来肯定是错误的行为。我不会深入讨论细节,这个答案可能不会让您满意,因为它是一个非常TLDR,但本质上,当您调用update函数时,它不会立即发生,而是在下一次刷新时发生。您告诉shiny更新输入,然后您正在打印输入,但更新尚未发生。我同意这是不直观的,有时它很烦人,因为你想能够使用相同的价值,你刚刚更新。我很久以前就向Shinny提交了一个问题,所以看看是否有办法控制这种行为,如果我找到了,我会添加一个链接

编辑:我错了,我没有提交一个bug,但我在2年前在闪亮的谷歌集团讨论过这个问题

ui <- fluidPage(
  p("The first checkbox group controls the second"),
  checkboxGroupInput("inCheckboxGroup", "Input checkbox",
                     c("Item A", "Item B", "Item C")),
  checkboxGroupInput("inCheckboxGroup2", "Input checkbox 2",
                     c("Item A", "Item B", "Item C"))
)

server <- function(input, output, session) {
  observe({
  print(input$inCheckboxGroup2)
  x <- input$inCheckboxGroup

  # Can use character(0) to remove all choices
  if (is.null(x))
   x <- character(0)

  # Can also set the label and select items
  updateCheckboxGroupInput(session, "inCheckboxGroup2",
                           label = paste("Checkboxgroup label", length(x)),
                           choices =  c("Item A", "Item B", "Item C"),
                           selected = x
  )
  print(input$inCheckboxGroup2)
  })
}


shinyApp(ui, server)