我的闪亮应用程序中的递归问题。假设我的应用程序读取文件并创建数据集(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()'存储'为非反应式表达式,以避免出现明显的错误:
评估嵌套太深:无限递归
非常感谢任何帮助:)
答案 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
中的值开始。