我有一个闪亮的应用程序,每个选项卡上都有许多选项卡和许多小部件。它是一个数据驱动的应用程序,因此数据与每个选项卡相关联。
我可以使用image.save()
保存应用程序并创建.RData
文件供以后使用。
我遇到的问题如何才能恢复小部件的状态?
如果用户选中了复选框,选中的单选按钮和列表框中指定的基线值,我可以在load()
步骤中设置这些值吗?
我已经找到了shinyURL
和shinystore
这样的库,但有没有直接的方法将环境设置回write.image
完成时?
我不确定从哪里开始,所以我无法发布代码。
编辑:这是来自Shiny Google Group的交叉帖子,其中提出了其他解决方案
答案 0 :(得分:3)
这有点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]]))
)
}
})
}
)
答案 1 :(得分:0)
现在可以通过添加书签来保存Shinyapp的状态。您必须在应用程序上加上bookmarkButton,还要在enableBookmarking上放
。答案 2 :(得分:0)
如果闪亮的UI包含日期,则上面的示例可能不起作用。这是日期处理的一个小更改。
library(shiny)
shinyApp(
ui = fluidPage(
dateInput("date", "date", "2012-01-01"),
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]]))
)
temp=as.character(as.Date(values$date, origin = "1970-01-01"))
updateDateInput(session, inputId="date", label ="date", value = temp)
}
})
}
)