【发布时间】:2016-03-26 02:30:21
【问题描述】:
我正在构建一个 R Shiny 应用程序,作为我的团队构建的仿真模型的 GUI。用户定义参数,点击运行,模型生成一堆图表作为输出。我的问题是,每次用户打开应用程序时,他们都必须再次输入参数。我希望他们能够保存他们的参数并在他们返回应用程序时再次显示它们。
我最初的方法是让用户使用 downloadHandler 将 csv 中的参数下载到他们的本地计算机,然后在他们的下一个会话中上传它们。这是行不通的,因为格式混乱或用户更改文件的风险太大,然后当他们再次上传时我会出错。
我认为最有意义的是将参数保存在服务器上的文件中(我更喜欢 .Rdata 文件,这样我可以将参数保存在列表中),并使用 selectInput 小部件来允许用户调用他们想要的参数文件。我不知道如何从 Shiny 应用程序中保存到服务器,或者如何让 downloadHandler 执行此操作。
编辑 例如,当我这样做时: 用户界面:
downloadLink("saveParams",label="Save Your Model")
服务器:
output$saveParams <- downloadHandler(
filename <- function(){
paste0(input$nameModel,".RData")
},
content = function(file) {
inputparams<-inputparams()
save(inputparams, file = file)
}
)
它让用户可以选择保存文件的位置,这是我想避免的。我希望它自动将其放到服务器上。我尝试使用 actionButton 来触发使用 save 但无法运行的反应。
有什么建议吗?
【问题讨论】:
-
这应该相当简单,只要你的闪亮应用程序有适当的权限写入服务器上的文件夹。可能是触发R save() 方法的按钮,并使用
downloadLink获取文件下载链接 -
我以为就这么简单,但 downloadHandler 只给用户一个下载位置的选项;我希望它自动下载到服务器上,而不是让用户选择将其保存到其他地方。
-
其实只要用
selectInput让用户选择服务器上保存的文件之一即可。 -
如果您只有 1 个用户,请将所需参数设为默认参数。如果您有超过 1 个具有不同参数偏好的用户,您将不得不保留和保存用户特定的文件,这对于 Shiny 的免费开源版本是不可能的。
-
这个shiny extension 可能会满足您的需求。通过将其输入值编码到 URL 中来保存闪亮应用程序的状态。在这里你可以找到demo。