有没有办法在 Shiny 的当前 运行 中使用最后一个 运行 的结果?

Is there a way to use the result of last run in the current run in Shiny?

我正在使用 Shiny 为用户构建动态仪表板。我使用 if 语句将我的代码分为两个主要部分。有一个名为 "New Line" 的输入,用户需要输入 "Yes" 或 "No" 作为此参数的值。如果用户选择 "Yes",代码的第一部分将是 运行,如果他选择 "No",则意味着第一部分是之前的 运行,只是第二部分代码必须是 运行。在第二部分中,有一些来自第一部分的参数。我想让 Shiny 保存从 ("New Line"==Yes) 计算的结果和参数,并将其用于下一个 运行s("New Line"==No) 直到用户更改答案再次 "New Line" 到 "Yes"。 我在 Shiny 中使用了 observeEvent 函数和一个动作按钮。但问题是 ("New Line"==Yes) 的结果不能用于接下来的 运行s.

shinyserver(function(input,output)){
  observeEvent(input$click,{
   if(input$'New Line' == 'Yes'){}
   if(input$'New Line' == 'No'){}
  })
}

我希望每当用户为 New Line 输入 No 并点击操作按钮时,代码可以使用 New LineYes 时计算的变量.但是现在每当我将 New Line 设置为 No 并点击操作按钮时,R 只是 运行 第二个 if。我可以复制并粘贴从第一行开始的所有行 if to tell R to 运行 all them again 但这些行大约需要 30 分钟,我不想重复它们。

您需要在某处序列化您的值。 一个例子:

shinyserver(function(input,output)){
  observeEvent(input$click,{
   if(input$'New Line' == 'Yes'){

       data <- result_of_some_function()
       some_other_things()
       write.csv(data, "file.csv") # saving the data somewhere on disk

   }

   if(input$'New Line' == 'No'){

       mypreviousdata = read.csv("file.csv")
       something <- somefunction(mypreviousdata)

   }
  })
}

除了保存为 CSV,您可能更喜欢数据库或用户的 cookie,或其他任何东西。