【发布时间】: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) 并没有改变任何事情。
【问题讨论】: