如何修复OutOfMemoryError(Java):r中超出了GC开销限制?

如何修复OutOfMemoryError(Java):r中超出了GC开销限制?,r,excel,xlsx,xlconnect,R,Excel,Xlsx,Xlconnect,我必须读取文件夹列表中的文件,并将数据保存在R中。 我对测试数据使用了下面的代码,它可以正常工作。当我对实际数据使用代码时 我得到这个错误 错误:OutOfMemoryError(Java):超出GC开销限制 调用自:顶级 这就是我为测试数据所做的 parent.folder <- "C:/Users/sandesh/Desktop/test_R" sub.folder <- list.dirs(parent.folder, recursive =TRUE)[-1] file <

我必须读取文件夹列表中的文件,并将数据保存在R中。 我对测试数据使用了下面的代码,它可以正常工作。当我对实际数据使用代码时 我得到这个错误
错误:OutOfMemoryError(Java):超出GC开销限制 调用自:顶级

这就是我为测试数据所做的

parent.folder <- "C:/Users/sandesh/Desktop/test_R"
sub.folder <- list.dirs(parent.folder, recursive =TRUE)[-1]
file <- file.path(sub.folder, "sandesh1.xlsx")
library(xlsx)
library(plyr)
fun <- function(file) {
  df <- read.xlsx(file, sheetIndex=1)
}
df.big <- ldply(file, fun)

parent.folder这是rJava中的一个典型问题。XLConnect文档中对此进行了回答,该文档还使用rJava以与xlsx库相同的方式连接到excel。我引述:

“这是因为XLConnect(与xlsx相同)需要将整个数据对象复制到JVM以便 要将其写入文件,JVM必须使用其内存大小的固定上限进行初始化 在这个数量上,您可以将参数传递给R的JVM,就像通过 rJava的选项支持:

options(java.parameters = "- Xmx1024m")
但是,请注意,当JVM初始化时,这些参数在每个R会话中只计算一次 -这通常是在您加载第一个使用Java支持的包之后,所以您应该尽早这样做 可能。”

如上所述,在加载任何库之前,请在脚本开头运行选项函数,如果您是通过Rstudio运行它,请确保在运行脚本之前重新启动它


另外,请注意,根据您试图解析的文件的大小,仍然无法确定此选项是否有效。

LyzandeR,谢谢您的回答。我按照您的建议使用了此选项,但仍然出现相同的错误。我发现了另一个名为openxlsx的包,我认为它对于依赖JVM的包(如xlsx或XLConnect)是一个不错的选择。因此,当我使用openxlsx包时,脚本在执行时不会生成错误消息。但是,由于某些原因,结果数据集完全不同。它们甚至与excel中的数据集不匹配。所以…我还在挠头。是的。我也犯了同样的错误,上面的方法确实有效,但我的一位同事无法用上面的方法解决它。这就是为什么我说它可能不起作用。显然,它只适用于少数情况,并且根据文件/java版本/r版本/计算机规格等。您也可以尝试xlsx库、gdata库或Rexcel库。检查。其中一个可能有效。通常,他们都使用Rjava。此外,如果您在32位机器上工作,这也是它失败的原因之一。