保存Shiny app的状态以便稍后恢复

use*_*234 7 r shiny

我有一个闪亮的应用程序,每个选项卡上有许多选项卡和许多小部件.它是一个数据驱动的应用程序,因此数据与每个选项卡相关联.

可以使用保存应用程序image.save()并创建一个.RData文件供以后使用.

我遇到的问题如何才能为小部件恢复状态?

如果用户已选中复选框,则可以在列表框中选择单选按钮和指定的基线值,然后在load()步骤中设置这些值?

已经发现库如shinyURLshinystore但有一种直接的方式来设置环境回来的时候到write.image了呢?

我不知道从哪里开始所以我不能发布代码.

编辑:这是来自Shiny Google Group的交叉帖子,其中提出了其他解决方案

Dea*_*ali 8

这有点hacky,但它有效。它使用了一个session$sendInputMessage不打算显式调用的“内部”函数 ( ),因此不能保证这将始终有效。

您想保存input对象的所有值。我正在使用所有小部件reactiveValuesToList(input)(请注意,这也将保存按钮的状态,这并不完全有意义)。另一种方法是准确枚举要保存的小部件,但该解决方案不太通用,每次添加/删除输入时都必须更新它。在下面的代码中,我只是将值保存到一个名为 的列表中values,您可以将其保存到文件中,但您愿意(RDS/文本文件/任何)。然后加载按钮查看该列表并根据列表中的值更新每个输入。

这个线程中有一个类似的想法

library(shiny)

shinyApp(
  ui = fluidPage(
    textInput("text", "text", ""),
    selectInput("select", "select", 1:5),
    uiOutput("ui"),
    actionButton("save", "Save"),
    actionButton("load", "Load")
  ),

  server = function(input, output, session) {

    output$ui <- renderUI({
      tagList(
        numericInput("num", "num", 7),
        checkboxGroupInput("chk", "chk", 1:5, c(2,4))
      )
    })

    observeEvent(input$save, {
      values <<- lapply(reactiveValuesToList(input), unclass)
    })

    observeEvent(input$load, {
      if (exists("values")) {
       lapply(names(values),
              function(x) session$sendInputMessage(x, list(value = values[[x]]))
              )
      }
    })
  }
)
Run Code Online (Sandbox Code Playgroud)

  • 我在这里的答案和建议的线程方面取得了巨大的成功。谢谢大家的支持。我有一个后续问题。我同时使用 rhandsontable 和 renderUI。对于 rhandsontable,我可以使用这里的技术来保存和更新它。我需要确保小部件已激活,以便在保存应用程序时触发回调。有没有办法在代码中强制这样做?renderUI 仍然是个谜,任何建议都会很棒。 (2认同)