3

我的反应式表达式产生一个数值向量。有没有办法可以保存以前渲染的值并在下次重新使用它?我尝试创建一个额外的反应式表达式来保存值,然后在使用第一个反应式表达式时再次调用它,但这会导致以下错误:

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 更新时,它应该将旧/以前的值作为输入。我很抱歉弄得一团糟——我知道如果没有可重复的例子,很难帮助我。但基本上,我只想修复之前的反应结果并在下次重新使用它。

4

1 回答 1

4

有点晚了,但我认为这就是你想要的 - 这是一个很好的 excersize。它使用反应变量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)

图片:

在此处输入图像描述

于 2016-12-17T13:30:57.020 回答