我尝试使用XLConnect包将~30MB excel电子表格加载到R中。
这就是我写的:
wb <- loadWorkbook("largespreadsheet.xlsx")
大约15秒后,我收到以下错误:
错误:OutOfMemoryError(Java):超出了GC开销限制。
这是XLConnect软件包的限制还是有办法调整内存设置以允许更大的文件?
我感谢任何解决方案/提示/建议。
答案 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)