在R中观察输入的变化并更新输出

在R中观察输入的变化并更新输出,r,shiny,reactive-programming,R,Shiny,Reactive Programming,我想观察输入中的变化。当输入更改时,应更新输出 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(o

我想观察
输入中的变化。当
输入
更改时,应更新
输出

    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
是一个被动值对象,它应该调用
eventReactive
返回的被动表达式对象。为什么
输出$a
没有得到更新

eventReactive
确实返回一个被动表达式,该表达式是一个函数,并且是惰性计算的。要计算反应表达式,必须满足两个条件:

  • 必须有一个依赖于它的输出元素
  • 必须至少使其一个依赖项无效
因为您的代码会立即丢弃新创建的表达式,所以很明显,这些表达式没有依赖值,也没有计算的理由

据我所知,你的意图是,你需要的是一个观察者,它不同于被动的表达,是热切地被评估的

observeEvent(somevent, { someAction() })
另一方面,使用反应性表达来表达副作用通常不是一个好的做法