我有一个Shiny应用程序,我想完成以下任务:
1)用户按下按钮
2)数据框被导出到.csv,保存在工作目录中(使用server.R和ui.R),或理想情况下保存一级。
我希望这是自动发生的,因为最终我要将它与checkboxGroupboxInput连接以循环数据并生成一组过滤的.csv。
这是我目前最接近的,fileToDownload表示我的数据框:
ui.R:
downloadButton("rptDownload", "Download Report"),
server.R:
output$rptDownload <- downloadHandler(
filename = function() {
paste(getwd(), '/rpt/test.csv',sep = '')
},
content = function(con) {
write.csv(fileToDownload, file = file.path(con))
}
)
当我从Chrome浏览器运行它时,它会下载到.csv,但它会以我想要的文件路径命名为:C - Work-Project_A-Shiny_DB-rpt-test .csv格式。它将getwd()和/ rpt /视为名称的一部分而不是文件路径。它会下载到我的下载文件夹,而不是当前的工作目录。
有关如何改进代码的任何建议?
请注意,我已尝试合并其他主题的一些建议。其中包括:
Shiny (R): Download selection in selectInput to local machine
Automatic multi-file download in R-Shiny
https://groups.google.com/forum/#!topic/shiny-discuss/MaN4-ia6wfk
但这些似乎让我更远离完成我想要做的事情。感谢您的帮助。
答案 0 :(得分:1)
我认为你想要的是让用户点击一个按钮并让shiny
将数据保存到你指定的某个文件夹。这是对的吗?
如果这就是您想要的,那么创建一个按钮,当用户点击该按钮时,该按钮只会write.csv(<DF-to-write>, <filename-to-use>)
或沿着这些行显示。
无需使用downloadHandler
。 downloadHandler
函数特定于导出数据:用户单击此按钮,您的应用程序会为其导出数据。当您以这种方式使用数据时,数据显示在Download
文件夹中的原因是您已将浏览器设置为将所有下载的文件存储到Download
目录。
如果需要,您可以为SaveSelectedData
设置一个按钮,为DownloadSavedData
设置另一个按钮。
SaveSelectedData
会write.csv
您指定文件夹感兴趣的df。
DownloadSavedData
会将数据导出给您的用户(您无法指定将其下载到用户系统的哪个位置 - 这取决于在他们的浏览器设置上。)
另请注意,在服务器上运行时,您需要确保Shiny有权写入您希望将文件保存到的文件夹。