我有一个闪亮的应用程序,每个选项卡上有许多选项卡和许多小部件.它是一个数据驱动的应用程序,因此数据与每个选项卡相关联.
我可以使用保存应用程序image.save()
并创建一个.RData
文件供以后使用.
我遇到的问题如何才能为小部件恢复状态?
如果用户已选中复选框,则可以在列表框中选择单选按钮和指定的基线值,然后在load()
步骤中设置这些值?
我已经发现库如shinyURL
和shinystore
但有一种直接的方式来设置环境回来的时候到write.image
了呢?
我不知道从哪里开始所以我不能发布代码.
编辑:这是来自Shiny Google Group的交叉帖子,其中提出了其他解决方案
这有点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)