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

3

我希望观察一个输入框的变化。当输入框发生改变时,输出框应该被更新。

    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

我原本期望在更改input$act1后,output$a会变成20。但是这并没有发生。
由于input是一个反应式值对象,它应该调用eventReactive返回的反应式表达式对象。那么为什么output$a没有被更新呢?
1个回答

2
eventReactive 实际上返回一个反应式表达式,它是一个函数并且是惰性评估的。有两个条件必须满足才能评估反应式表达式:

  • 必须存在一个依赖于它的输出元素
  • 其至少一个依赖项必须无效

由于您的代码立即丢弃新创建的表达式,因此显然没有依赖值,并且没有评估的理由。

据我所知,您需要的是观察者,与反应式表达式不同,它是急切地评估的。

observeEvent(somevent, { someAction() })

顺便提一下,通常来说,使用反应式表达式进行副作用操作并不是一个好的做法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接