r - 观察输入的变化并更新 R Shiny 中的输出

标签 r shiny reactive-programming

我想观察 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/

相关文章:

r - 如何使用 stringr 从字符串中提取多个重叠的字符串?

r - 从字符串列表中,确定哪些是人名,哪些不是

r - ggplotly 没有适用于 'plotly_build' 的方法应用于类 "NULL"if 语句的对象

r - 在 R Shiny 中更改 sliderInput 上的刻度线标签

c++ - RXcpp 连续从函数流式传输数据

R:无法在 PopOS 21.04 中安装天才包

r - c 使用rep或replicate或类似的语料库

multithreading - 如何在单独的线程中运行 `Observable`?

events - 如何在 Shiny 的应用程序中将传单 map 点击(事件)与绘图创建联系起来

system.reactive - 相当于ReactiveCocoa的RACObserve的RxJava(或Rx.NET)