gpt4 book ai didi

R/Shiny Downloadhandler 结果被截断的 .csv 文件

转载 作者:行者123 更新时间:2023-12-05 06:38:45 25 4
gpt4 key购买 nike

我构建了一个以 react 值存储数据框的应用程序。然后我有一个 UI 下载按钮,可以将该数据框下载到 CSV 文件中。在 CSV 文件变得非常大之前,它运行良好。我估计大约有 100MB,但很难确定。

我的代码很普通——但一个最小的可重现示例可能如下所示。似乎在本地运行它和在我的 Shiny Server 实例 (Amazon EC2) 上运行它可能有所不同。

ui.R

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

服务器.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)
})

})

最佳答案

我最好的猜测是你没有等待 shiny 完成将文件写入磁盘的时间。写入大文件需要 R 花费大量时间(您提供的数据帧需要 30-60 秒才能写入)。

另一件需要注意的事情是 shiny 不会直接写入您在 filename 中提供的文件。相反,它将数据写入一个临时文件,然后将该临时文件复制到 filename....这两个步骤都需要时间,因此您必须在 R 执行其操作时让 session 保持打开状态。下面的示例对我有用。

library(shiny)

ui <- fluidPage(
downloadButton("big_download", "Download Large File"),
downloadButton("small_download", "Download small File")
)

server <- shinyServer(function(input, output, session) {

big_data <- data.frame(col1 = seq(0:30000000), col2 = seq(30000000:0))
small_data <- mtcars

output$big_download <- downloadHandler(
filename = function() {
"big-data.csv"
},
content = function(filename) {
print("writing data to tempfile")
write.csv(big_data, filename, row.names = F)
print("finished writing to tempfile, now copying it")
}
)

output$small_download <- downloadHandler(
filename = function() {
"small-data.csv"
},
content = function(filename) {
write.csv(small_data, filename, row.names = F)
}
)

})

shinyApp(ui, server)

关于R/Shiny Downloadhandler 结果被截断的 .csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com