下载包含数据表的多个反应对象

时间:2017-07-23 22:05:34

标签: r shiny

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

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

代码

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
)

1 个答案:

答案 0 :(得分:0)

您可以先保存zip文件,然后将其压缩,如下所示:

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)

您可以指定一个子目录,以保持您的目录清洁。希望这有帮助!