如何在每次点击下载按钮后更新filename
的值,以获得有光泽的downloadHandler?我尝试使用Sys.time构建一个唯一的文件名。唉,当Shiny应用程序打开时,Sys.time()似乎只执行一次。因此,尝试第二次下载文件并不会给出新的文件名,只是在文件名的末尾给出[1]。
以下最简单的可重复示例:
library(shiny)
if (interactive()) {
ui <- fluidPage(
downloadButton("downloadData", "Download")
)
server <- function(input, output) {
# Our dataset
data <- mtcars
output$downloadData <- downloadHandler(
filename = paste("example",gsub(":","-",Sys.time()), ".csv", sep=""),
content = function(file) {
write.csv(mtcars,file)
}
)
}
runApp(list(ui=ui,server=server),launch.browser=T)
}
确保您尝试在同一实例中第二次下载文件,检查文件上的名称。
答案 0 :(得分:4)
这是因为你没有提供一个函数,而是一个值作为filename
的参数。这就是你总是拥有相同文件名的原因:启动downloadHandler
时会分配一个值,而downloadButton
上的每次点击都会评估一个函数。
所以在函数中包装文件名的代码,问题就解决了:
library(shiny)
if (interactive()) {
ui <- fluidPage(
downloadButton("downloadData", "Download")
)
server <- function(input, output) {
# Our dataset
data <- mtcars
output$downloadData <- downloadHandler(
filename = function(){
paste("example",gsub(":","-",Sys.time()), ".csv", sep="")
},
content = function(file) {
write.csv(mtcars,file)
}
)
}
runApp(list(ui=ui,server=server),launch.browser=T)
}
此信息也可以在以下RStudio文章中找到: