我想观察 input
的变化。当input
改变时,output
应该更新。
output = reactiveValues(a = 10)
input = reactiveValues(act1 = 0, act2 = 0)
eventReactive(input$act1, { output$a = 20 })
eventReactive(input$act2, { output$a = 30 })
isolate(input$act1)
# 0
isolate(output$a)
# 10
input$act1 = 1
isolate(output$a)
# 10
isolate(input$act1)
# 1
我原以为 output$a
在更改 input$act1
后会变成 20。但这并没有发生。
由于input
是一个响应式(Reactive)值对象,它应该调用eventReactive
返回的响应式(Reactive)表达式对象。为什么 output$a
没有更新?
最佳答案
eventReactive
确实返回了一个响应式(Reactive)表达式,它是一个函数并且被延迟计算。要评估响应式(Reactive)表达式,需要满足两个条件:
- 必须有一个依赖于它的输出元素
- 至少其依赖之一必须失效
由于您的代码会立即丢弃新创建的表达式,因此很明显它们没有依赖值,因此没有理由进行评估。
据我了解你的意图,你需要的是一个观察者,与响应式(Reactive)表达不同,它被急切地评估。
observeEvent(somevent, { someAction() })
附带说明,使用响应式表达式来处理副作用通常不是一个好的做法。
关于r - 观察输入的变化并更新 R Shiny 中的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32664872/