了解R-Shiny中的反应性:防止重新加载数据

时间:2018-03-12 06:24:14

标签: r shiny

对于Shiny应用程序,在server.R中,我当前通过反应命令从输入的文件加载数据。当我在server.R中的多个显示中调用data1()时(见下文),有没有办法只调用一次data1?如果我在render方法之外使用data1(),我会收到以下错误:“没有活动的响应上下文时不允许操作”。

data1 <- reactive({
  file1 = input$file1
  if (is.null(file1))
      return(NULL) 
  data <- getNormalizedData(file1$datapath, input$value)
  data
})
output$plotFileB <- renderPlotly({
    test.out <- data1()
    ...
})
output$mytable1 = renderDataTable({
    test.out <- data1()
    test.out
})

1 个答案:

答案 0 :(得分:2)

关于反应性的好处是,如果多次调用data1(),但输入没有改变,data1内的代码实际上不会多次运行。它只会运行一次。这是反应变量的主要思想 - 它们会缓存它们的价值,这意味着如果你在没有任何输入改变的情况下调用它们100次,它们只评估一次,接下来的99次它们只是立即返回它们记住的值。因此,每次调用data1()时,数据实际上都不会被重新加载。您可以通过在print()中添加data1语句来说服自己,并确保它只打印一次。

我建议对反应变量和反应性做一些阅读以内化这个概念。本教程(免责声明:我写的)可以成为这个主题的一个很好的资源:Reactivity 101

相关问题