使用R和XLConnect包时出现“Out of Memory Error(Java)”

时间:2011-11-01 07:01:47

标签: excel r memory

我尝试使用XLConnect包将~30MB excel电子表格加载到R中。

这就是我写的:

wb <- loadWorkbook("largespreadsheet.xlsx")

大约15秒后,我收到以下错误:

  

错误:OutOfMemoryError(Java):超出了GC开销限制。

这是XLConnect软件包的限制还是有办法调整内存设置以允许更大的文件?

我感谢任何解决方案/提示/建议。

7 个答案:

答案 0 :(得分:31)

按照website

的建议
options(java.parameters = "-Xmx1024m")
library(XLConnect)

答案 1 :(得分:29)

如果您仍然无法导入XLSX文件,则可以使用此选项。回答“Xmx1024m”无效,我改为“-Xmx4g”。

options(java.parameters = "-Xmx4g" )
library(XLConnect)

This链接很有用。

答案 2 :(得分:14)

openxlsx package中使用read.xlsx()。它不依赖rJava,因此只有R本身的内存限制。我没有深入探讨XLSX的编写和格式化,但它有一些看起来很有前途的观点。对于阅读大型电子表格,它运作良好。

帽子小贴士给@ Brad-Horn。我刚刚将他的评论作为答案,因为我也认为这是最好的解决方案!

答案 3 :(得分:10)

如果有人在读取一个巨大但多个文件时遇到此错误,我设法通过释放xlcFreeMemory()的Java虚拟机内存来解决此错误,因此:

files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
    wb <- loadWorkbook(...)
    ...
    rm(wb)
    xlcFreeMemory()  # <= free Java Virtual Machine memory !
}

答案 4 :(得分:2)

当你在不重启R-Studio的情况下一遍又一遍地使用相同的R-session时,情况似乎就是这种情况。重新启动R-Studio可以帮助为程序分配新的内存堆。它立刻对我有用。

答案 5 :(得分:1)

按照此here中的建议,请确保在代码的第一行中运行选项功能。就我而言,它只有在重新启动R会话并在第一行中运行时才起作用。

options(java.parameters = "-Xmx4g" )
library(XLConnect)

答案 6 :(得分:0)

每当您使用依赖于rJava的库(例如我的RWeka)时,您必定会在某一天达到默认堆空间(512 MB)。现在,当您使用Java时,我们都知道要使用的JVM参数(如果您需要2 GB的RAM,则为-Xmx2048m)。这只是如何在R环境中指定它的问题。

   options(java.parameters = "-Xmx2048m")
   library(rJava)