【问题标题】:Downloading multiple reactive objects containing data tables下载多个包含数据表的反应对象
【发布时间】:2017-07-24 14:07:50
【问题描述】:

我在闪亮的应用程序(RA_s,Per) 中有多个反应对象表,我分别下载每个表。现在,我正在尝试使用下载按钮下载一个包含所有这些表格的 zip 文件。

这是我的代码,我不知道如何完成downloadHandler函数。我想下载一个 zip 文件,其中包含 2 个 csv 文件 RA_sPer

代码

shinyServer(function(input, output) {

  RA_s <- reactive({
    iris
  })

  Per <- reactive({
    sepal1 <- RA_s()["Sepal_Length"]
    sepal2 <- RA_s()["Sepal_Width"]
    value = sepal1*sepal2
    c = cbind(RA_s(),value)
  })

  output$downloadData <- downloadHandler(
  filename = function() {
    paste0("output", ".zip")
  },
  content = function(file) {
  ...
  })
})


sidebar <- dashboardSidebar(
  sidebarMenu(
    menuItem("Download", tabName = "d")
)
body<- dashboardBody(
  tabItems(
    tabItem(tabName = "d",
         downloadButton('downloadData', 'Download')
     )
  )
dashboardPage(
dashboardHeader(title = "Valo"),
sidebar,
body
)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以先保存压缩文件,然后再压缩,如下:

    library(shiny)
    server<- shinyServer(function(input, output) {
    
      RA_s <- reactive({
        iris
        print(iris)
      })
    
      Per <- reactive({
        sepal1 <- RA_s()["Sepal.Length"]
        sepal2 <- RA_s()["Sepal.Width"]
        value = sepal1*sepal2
        c = cbind(RA_s(),value)
      })
    
      output$downloadData <- downloadHandler(
        filename = 'two_csvs.zip',
        content = function(fname) {
    
          write.csv(RA_s(), file = "csv1.csv", sep =",")
          write.csv(Per(), file = "csv2.csv", sep =",")
    
          zip(zipfile=fname, files=c("csv1.csv","csv2.csv"))
        },
        contentType = "application/zip"
      )
    
    })
    
    ui<- shinyUI(
    
      downloadButton('downloadData', 'Download')
    
    )
    
    shinyApp(ui,server)
    

    您当然可以指定一个子目录,以保持您的目录干净。希望这会有所帮助!

    【讨论】:

    • 感谢@Florian,它运行良好。如何指定要保存 zip 文件的目录?
    • 您可以通过 write.csv(RA_s(), file = "dirname/csv1.csv", sep =",") 指定 csv 的目录,其中 dirname 应该是您的目录名称。请注意,该目录必须存在才能正常工作!例如,您可以在与您的 ui.R 和 server.R 相同的文件夹中创建一个文件夹“storage”。如果有帮助,请考虑接受我的回答,谢谢!
    • 我还有点小问题。除了 zip 文件,csv 文件也单独下载到我的工作目录中
    • 我认为它们是由于 write.csv 语句而创建的。您是否在工作目录中创建了一个额外的文件夹并按照我之前的 cmets 调整写入 csv 语句?
    • 是的,但它不起作用。我有这个错误:'错误:无法打开连接'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多