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

时间:2014-11-26 16:16:51

标签: 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 <- file.path(sub.folder, "sandesh1.xlsx")
library(xlsx)
library(plyr)
fun <- function(file) {
  df <- read.xlsx(file, sheetIndex=1)
}
df.big <- ldply(file, fun)

1 个答案:

答案 0 :(得分:26)

这是rJava中的典型问题。它在XLConnect文档中得到了解答,该文档也使用rJava以与xlsx库相同的方式连接到excel。我引自here

“这是因为XLConnect(xlsx相同)需要按顺序将整个数据对象复制到JVM 将其写入文件并且必须使用其内存大小的固定上限初始化JVM。改变 这个数量,您可以将参数传递给R的JVM,就像您可以通过命令行Java进程一样 rJava的选项支持:

options(java.parameters = "- Xmx1024m")

但是,请注意,在初始化JVM时,每个R会话只会精确评估一次这些参数 - 这通常是在您加载第一个使用Java支持的包之后,所以您应该尽早这样做 可能的“。

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

此外,请注意,根据您尝试解析的文件大小,即使这样也无法确定。