【问题标题】:Shiny updateCheckboxInputGroup闪亮的更新CheckboxInputGroup
【发布时间】:2018-03-03 22:35:14
【问题描述】:

我在 updateCheckboxGroupInput 没有真正更新输入(及时)让我的以下观察者做出反应时遇到问题。

在实验时,我发现了一些让我(很多)困惑的结果,希望有人能启发我。以下两个代码 sn-ps 都是该函数闪亮帮助中提供的代码的变体。

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)

当我使用 observeEvent() 运行此代码并在第一组框中的复选框时,“打印”都为我提供了更改之前的选择(尽管一个打印是在更改之前和之后更新复选框组输入)。相应地(我认为)跟随 observeEvents 错误地使用了错误的输入。

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)

当我使用 observe 运行此代码并在第一组框中的复选框时,“打印”都会在更改后给我选择(尽管一个打印是在 updateCheckboxGroupInput 之前和一个之后)。

为什么会这样?我可以用 observeEvent 做什么来确保后续事件观察者使用更新的值?

我的问题与不久前提出的这个问题有关:

Shiny "updateCheckboxGroupInput" inconsistency

那里的答案对我没有帮助。将选定的参数设置为 character(0) 并没有改变任何事情。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

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

    编辑:我错了,我没有提交错误,但我确实在 2 年前在闪亮的谷歌小组上讨论过这个问题 https://groups.google.com/d/msg/shiny-discuss/uSJXD8IBpkY/RpJo2wBzRrMJ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-20
      • 2021-02-13
      • 1970-01-01
      • 2021-07-31
      • 2015-10-02
      • 2015-10-27
      • 1970-01-01
      • 2015-08-03
      相关资源
      最近更新 更多