20

我必须读取文件夹列表中的文件并将数据保存在 R 中。我将以下代码用于我的测试数据并且它可以工作。当我将代码用于实际数据时,我收到此错误
Error: OutOfMemoryError (Java): GC overhead limit exceeded Called from: top level

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

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)
4

1 回答 1

43

这是 rJava 中的典型问题。XLConnect 文档中对此进行了回答,该文档也使用 rJava 以与 xlsx 库相同的方式连接到 excel。我从这里引用:

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

options(java.parameters = "- Xmx1024m")

但是请注意,在初始化 JVM 时,每个 R 会话只对这些参数进行一次评估——这通常是在您加载第一个使用 Java 支持的包时,因此您应该尽早执行此操作。”

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

另外,请注意,根据您尝试解析的文件的大小,仍然不确定这是否会起作用。

于 2014-11-26T17:45:50.323 回答