【发布时间】:2016-05-10 02:55:43
【问题描述】:
我正在构建一个闪亮的应用程序,它会定期读取新数据,然后使用该数据和以前的参数估计值来生成新的参数估计值(等等无限循环)。
问题是参数必须在数据更新时通过响应式更新,而且还需要引用它的先前值,我不确定如何使用它的当前值来计算它的下一个值,而不会抱怨无限递归。下面是一个最小的示例,它旨在打印一个每秒增加 1 的值。
library(shiny)
omega <- 0
# Define the UI
myui <- basicPage(
textOutput('var')
)
# Define the server code
myserver <- function(input, output, session) {
omega <<- reactive({
invalidateLater(1000, NULL)
return(omega() + 1)
})
output$var <- renderText(omega())
}
# Return a Shiny app object
shinyApp(ui = myui, server = myserver)
这会产生以下错误
evaluation nested too deeply: infinite recursion / options(expressions=)?
如果我尝试通过使用 isolate() 来保护对 omega() 的调用,我会从 C 堆栈溢出中得到一个段错误。
有没有办法解决这个问题?或者也许是在闪亮中做我想做的更好的方法?
【问题讨论】:
-
segfault通常发生在您尝试访问不适合您的内存时。你的omega()结构很差
标签: r recursion shiny reactive-programming