R Shiny:存储反应式表达式以避免递归

时间:2016-06-25 03:30:33

标签: r recursion shiny

我的闪亮应用程序中的递归问题。假设我的应用程序读取文件并创建数据集(dataset())。然后我有一个处理所述数据集的函数,创建另一个(dataset.proc())。我可以根据需要多次对数据集应用处理(有几种处理方法)。另一个函数跟踪创建的最新数据集(dataset.current())。

这是我的server.R脚本的重要部分的一个简单示例:

dataset <- reactive(#reads file and creates dataset)

dataset.current <- reactive ({
  if (!is.null(dataset())){
    if (!is.null(dataset.proc())) {
      return(dataset.proc())
    } else {
      return (dataset())
    }
  }
}) 

dataset.proc <- reactive(#processes dataset.current() according to user input, creates a processed dataset)

有什么方法可以将dataset.proc()'存储'为非反应式表达式,以避免出现明显的错误:

  

评估嵌套太深:无限递归

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

您可以在服务器代码中使用“普通”R变量。例如,

current <- dataset() # Load initial dataset

shinyServer(function(input, output) {
  output$dataset.current <- renderDataTable({
    datatable(dataset.proc())
  })

  dataset.proc <- reactive({
    # Instead of dataset.current(), use the current variable

    # Processing ... 

    current <- data.frame("Processed")
    return(current)
  })
})

在返回dataset.proc被动表达式的结果之前,将“处理”的结果“保存”在current变量中。下一次,dataset.proc表达式可以从current中的值开始。