我的反应式表达式产生一个数值向量。有没有办法可以保存以前渲染的值并在下次重复使用它?我尝试创建一个额外的反应式表达式来保存值,然后在使用第一个反应式表达式时再次调用它,但这会导致以下错误:
Error in : evaluation nested too deeply: infinite recursion / options(expressions=)?
我无法上传我的整个示例,因为这是一项保密调查。但是,我试图深入了解我的server.R文件。
yvals <- reactive({...})
xvals <- c(...) #some default values to start with
xvals <- reactive({
dat <- data.frame(xvals(), yvals())
....
print(xvals)
})
问题在于yvals是基于ui.R的输入。但是,xvals不是(至少不是直接)。因此,当xvals更新时,它应该将旧/先前的值作为输入。我很抱歉这个烂摊子 - 我知道如果没有可重复的例子,很难帮助我。但基本上,我只想修复之前的反应结果并在下次重新使用它。
答案 0 :(得分:3)
有点晚了,但我认为这就是你想要的 - 这是一个很好的例外。它使用反应变量memory
来跟踪从一次迭代到下一次迭代。请注意isolate
表达式可以避免递归错误。
library(shiny)
ui <- fluidPage(
h1("Reactive Memory"),
sidebarLayout(
sidebarPanel(
numericInput("val","Next Value",10)
),
mainPanel(
verbatimTextOutput("prtxval")
)
))
server <- function(input,output,session) {
nrowsin <- 6
ini_xvals <- 1:nrowsin
memory <- reactiveValues(dat = NULL)
yvals <- reactive({ rep(input$val,nrowsin) })
xvals <- reactive({
isolate(dat <- memory$dat)
if (is.null(dat)) {
memory$dat <- data.frame(xvals = ini_xvals,yvals())
} else {
memory$dat <- data.frame(dat,yvals())
}
return(memory$dat)
})
output$prtxval <- renderPrint({ xvals() })
}
shinyApp(ui,server)
照片: