我构建了一个将数据帧存储在无效值中的应用程序。然后我有一个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)
})
})
答案 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