R / Shiny下载处理程序结果以trunctated .csv文件

时间:2017-08-07 10:04:37

标签: r shiny

我构建了一个将数据帧存储在无效值中的应用程序。然后我有一个UI下载按钮,将该数据框下载到CSV文件中。它很有效,直到CSV文件变得非常大。我估计大约100MB,但很难确定。

我的代码不起眼 - 但是可重复性最小的示例可能如下所示。似乎可能与在本地运行它并在我的Shiny Server实例(Amazon EC2)上运行它有所不同。

ui.R

shinyUI(downloadButton("goDownload","Download Large File"))

server.R

library(shiny)

shinyServer(function(input, output, session) {

 op <- reactiveValues(data = NULL)

op$dataOp<-data.frame(col1=seq(0:30000000),col2=seq(30000000:0)

dataOp <- reactive({
  if (!is.null(op$dataOp)){
    op$Labels
  } else {
    print("no op$dataOp")
  }
  })


output$goDownload<- downloadHandler(
    filename = function() { paste('Data.csv', sep='') },
    content = function(filename) {
      write.csv(dataOp(), filename, row.names = F)
    })

})

1 个答案:

答案 0 :(得分:1)

我的最佳猜测是,您等待的时间不够长,无法完成将文件写入磁盘的过程。 R会花费大量时间来写大文件(您给的数据帧需要30-60秒才能写完)。

要注意的另一件事是,闪亮不会直接写入您在bytes中提供的文件中。相反,它将数据写入临时文件,然后将该临时文件复制到b'…'。...这两个步骤都需要时间,因此您必须在R做事的同时保持会话打开。下面的示例对我有用。

# Rewrite breadcrumb links.
    # Block will be executed inside controller.
    # Block must return an array if you want to rewrite breadcrumb links.
    #
    # Example:
    #   ActiveAdmin.register Post do
    #     breadcrumb do
    #       [
    #         link_to('my piece', '/my/link/to/piece')
    #       ]
    #     end
    #   end
    #
    def breadcrumb(&block)
      config.breadcrumb = block
    end