r - Shiny DownloadHandler 不使用 Sys.time() 更新文件名

标签 r download shiny

你如何获得一个 Shiny 的 downloadHandler 来更新 filename 的值每次点击下载按钮后?我尝试使用 Sys.time 构造一个唯一的文件名。唉,Sys.time() 在 Shiny 应用程序打开时似乎只执行一次。因此,第二次尝试下载文件不会给出新的文件名,它只会在文件名的末尾给出一个 [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)
}

确保您尝试在同一实例中再次下载该文件,检查文件上的名称。

最佳答案

这是因为你没有给出一个函数而是一个值作为 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 的以下文章中找到:

https://shiny.rstudio.com/articles/download.html

关于r - Shiny DownloadHandler 不使用 Sys.time() 更新文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096105/

相关文章:

java - 如何在play框架作业中下载图像?

javascript - networkD3::sankeyNetwork 中的 R-自定义工具提示

r - 如何在不刷新图表的情况下为 mqtt 数据绘制实时折线图

r - 根据另一个数据框给出的类别聚合列

html - Ajax 文件下载问题

R:大型数据集(48-512 GB RAM)上的randomForest的堆栈溢出错误

php - 在 php/mysql 中为我的用户上传和下载

r - R Shiny 中响应式(Reactive)表达式中的全局赋值?

r - 直方图中条形组之间的间距

r - 提高 R 中删除每行重复值和移位值的效率