【问题标题】:Shiny observe event executing function as reactive闪亮的观察事件执行功能作为反应性
【发布时间】:2015-09-28 10:58:06
【问题描述】:

我正在尝试在observeEvent() 中执行一个函数

我有

  • 两个预定义函数:calculate_value()create_my_plot()
  • 一个输入存储为反应变量:myreactive()
  • 从文件中读取一个数据集a。根据输入值选择文件。
  • acalculate_value() 处理并传递给create_my_plot()

它是这样的:

myreactive<-reactive({input$myinput})
observeEvent(input$clicks,
{
 filename<-paste(myreactive(),".csv")
 a<-read.csv(filename)
 x<-calculate_value(a,b=myreactive())
 output$myplot<-renderPlot(
                   create_my_plot(x,myreactive())
 })

每当我单击操作按钮时,都会激活此事件并绘制新的绘图。但是,每当 myreactive() 更改时,此图也会重新绘制。这很好。但是重新绘制的情节有一个问题:它仍然使用“旧”版本的“x”

每当 myreactive() 更改时,我都需要重新计算函数 calculate_value()。它不会发生

我已经试过了

x<-reactive({ calculate_value(a,b=myreactive()) })

然后什么都没有发生。即该函数根本不执行,x 保留为空。 对我来说这是不可接受的,因为“myreactive()”正在改变数据集和绘图的描述,如果绘图没有相应地重新绘制,那就完全错误了。

如果 myreactive() 发生变化,完全删除绘图就足够了,但我实际上想知道发生了什么以及为什么我不能让 calculate_value() 每次都重新计算而 create_my_plot() 可以做它。

【问题讨论】:

  • 您能否将您的应用代码上传到gist(或将其附在您的问题末尾)?可以检查您的所有代码并可能尝试运行 runGist(key) 的应用程序。

标签: r shiny


【解决方案1】:

在我的例子中,当我使用observerEvent() 时,这个方法中引入的所有东西都会在某些值发生变化时发生变化。 Shiny 是一个利用反应式编程的框架。在任何情况下,您都将使用reactive() 来重新利用代码并获得干净的代码。如果您使用此变量并且值发生变化,则值将在所有位置发生变化。

解决问题的方法是在observerEvent() 中使用observe()。实际上,每次实习生代码的值发生变化时,observe() 都会执行其中的所有内容。

您可以查看此示例,并尝试使用它:

  testReactive<-reactive({as.numeric(input$numberTest)})

  observeEvent(input$bTest,{
    observe({   
                 x<-10+testReactive()
                 output$testing<-renderText(print(x))

            }) #Closed observe
  }) #Closed observeEvent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2015-11-29
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多