“mydata”数据框有 128,000 行。当我将它写入 xlsx 文件时,它只会继续运行,当我停止它时,我收到错误消息:
write.xlsx(x = mydata, file = "myfile.xlsx",
sheetName = "Sheet1", row.names = FALSE)
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, :
java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)
你知道这是什么意思吗?
write.xlsx2()也看看。根据xlsx包的文档,
函数 write.xlsx2 使用 addDataFrame,与 write.xlsx 相比,对于大型电子表格(包含超过 100,000 个单元格),执行速度提高了一个数量级。
当我向 .xslx 文件写入大量数据(即 >100,000 行)时,我遇到了与您相同的问题。使用write.xlsx2()已经解决了这些问题。
最后的方法可能是写入 .csv,在 Excel 中打开,然后重新保存为 .xlsx。
祝你好运!
小智 5
我建议您不要使用这些库(write.xlsx2 和 write.xlsx),实际上两者都在受数据大小和大量格式构建的困扰。编写数据帧的最简单方法(我假设您的原始数据位于数据帧结构中,或者可以将它们转换为数据帧)是使用writexl库。这里有一个例子:
library(writexl)
df <- data.frame(name = c("Jon", "Bill", "Maria"),
age = c(23,41,32))
xlx_store_path <- "where do you want to store the .xlsx file"
write_xlsx(df, xlx_store_path)
Run Code Online (Sandbox Code Playgroud)
完整来源:https ://datatofish.com/export-dataframe-to-excel-in-r/
如果您使用的是 Windows,请将此行添加到 R 脚本中(或从 RStudio 的控制台运行它)。
options(java.parameters = "-Xmx1024m")
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,但是增加内存参数解决了这个问题。
对此发表评论后,重新启动也没什么坏处。:)