web-dev-qa-db-ja.com

OutOfMemoryError(Java)の修正方法:rでGCのオーバーヘッド制限を超えましたか?

フォルダーのリストにあるファイルを読み取り、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)
15
poshan

これはrJavaの典型的な問題です。これは、xlConnectライブラリと同じ方法でrJavaを使用してExcelに接続するXLConnectのドキュメントで回答されています。 here から引用します:

「これは、XLConnect(xlsxと同じ)がデータオブジェクト全体をファイルに書き込むためにJVMにコピーする必要があり、JVMをメモリサイズの上限を固定して初期化する必要があるという事実が原因です。この量を変更するには、コマンドラインにJavaプロセスをrJavaのオプションサポート経由で処理できるように、RのJVMにパラメーターを渡します。

options(Java.parameters = "- Xmx1024m")

ただし、これらのパラメーターは、JVMの初期化時にRセッションごとに1回だけ評価されることに注意してください。これは通常、Javaサポートを使用する最初のパッケージをロードすると、できるだけ。"

上記のように、スクリプトの先頭でオプション機能を実行し、ライブラリをロードする前に、Rstudioで実行している場合は必ず再起動してくださいスクリプトを実行する前に。

また、解析しようとしているファイルのサイズによっては、これでも機能するかどうかはまだ不明です。

29
LyzandeR