用XLSX包写R excel文件需要很长时间和错误

时间:2014-12-11 17:48:25

标签: r

" 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

你知道这意味着什么吗?

4 个答案:

答案 0 :(得分:3)

同时查看write.xlsx2()。根据{{​​1}}包的文档,

  

函数write.xlsx2使用addDataFrame,与write.xlsx相比,可以加快执行速度   大型电子表格(超过100,000个单元格)的一个数量级。

当我向.xslx文件写入大(即> 100,000行)时,我遇到了与您相同的问题。使用xlsx解决了这些问题。

最后的手段可能是写入.csv,在Excel中打开,然后重新保存为.xlsx。

祝你好运!

答案 1 :(得分:2)

如果您使用的是Windows,请将此行添加到R脚本中(或从RStudio中的控制台运行)。

options(java.parameters = "-Xmx1024m")

我遇到了类似的问题但这个内存参数的增加解决了它。

对此评论后,重启不会有什么坏处。 :)

答案 2 :(得分:2)

我建议您不要使用这些库(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)

在此处完成请求:https://datatofish.com/export-dataframe-to-excel-in-r/

答案 3 :(得分:0)

write.xlsx在数据量很大时失败。改用以下方法:

library(xlsx)
myfile="my_excel_file_name.xlsx" #DO NOT USE SPACES, it will cause errors

wb = createWorkbook() #create a workbook object

mysheet = createSheet(wb, "Sheet1") #create a sheet and name it
addDataFrame(df1, sheet=mysheet, startColumn=1, row.names=FALSE) #add data to Sheet1

sheet = createSheet(wb, "Sheet2") #create another sheet
addDataFrame(df2, sheet=mysheet, startColumn=1, row.names=FALSE) #add data to Sheet2

#.... add as many sheets/data as you want ....

saveWorkbook(wb, myfile) #write to a physical Excel file here

将在您的默认工作目录中创建Excel文件。如果要在特定目录中创建文件,则在定义myfile时可以使用完整地址,也可以将工作目录设置为要将文件导出到的位置:

setwd("C:/R Files/Exported Files")

如果它不起作用,请尝试通过以下方式重新启动R:

Ctrl + Shift + F10 (PC)

命令 + Shift + F10 (Mac)