我有一个很大的问题.我正在尝试运行一个具有相当多设置的程序,可以在ui中设置.在我的情况下,用户可能需要多次使用相同的设置运行程序.我的问题是,如果刷新或重新启动UI,则所有内容都将设置为默认值.例如:
numericInput("1",
label = h4("...."),
4,
min=1,
max=100,
step=1
),
br(),
numericInput("2",
label = h4("..."),
1000000,
min=1,
max=100000000,
step=1
)
Run Code Online (Sandbox Code Playgroud)
如果我将numericInput"1"设置为7,并重新运行程序,默认情况下为4.由于我有很多这样的设置,这可能是一个非常棒的嗡嗡声.所以我的问题是:"有没有办法保存我所做的改变?"
谢谢:)
这是一个棘手的主题.最好有一个客户端解决方案.HTML5允许使用本地存储.有许多javascript库都有简单的api.我在其中一个周围放了一个包装器作为概念证明:
devtools::install_github("johndharrison/shinyStorage")
library(shinyStorage)
library(shiny)
runApp(
list(
ui = fluidPage(
addSS(),
uiOutput("textExample")
)
, server = function(input, output, session){
ss <- shinyStore(session = session)
output$textExample <- renderUI({
myVar <- ss$get("myVar")
if(is.null(myVar)){
textInput("textID", "Add some text to local storage")
}else{
textInput("textID", "Add some text to local storage", myVar)
}
})
observe({
if(!is.null(input$textID)){
if(input$textID != ""){
ss$set("myVar", input$textID)
}
}
})
}
)
)
Run Code Online (Sandbox Code Playgroud)
因此演示看起来并不多.在textInput框中输入一些文本刷新浏览器,文字记住臀部欢呼!该方法可以扩展到任何R列表,例如大小达10mb的对象.我会在包装上再修补一下.