web-dev-qa-db-ja.com

RおよびXLConnectパッケージを使用する場合の「メモリ不足エラー(Java)」

XLConnectパッケージを使用して、〜30MBのExcelスプレッドシートをRにロードしようとしました。

これは私が書いたものです:

wb <- loadWorkbook("largespreadsheet.xlsx")

約15秒後に、次のエラーが表示されました。

エラー:OutOfMemoryError(Java):GCオーバーヘッド制限を超えました。

これはXLConnectパッケージの制限ですか、それとも大きなファイルを許可するためにメモリ設定を調整する方法はありますか?

ソリューション/ヒント/アドバイスに感謝します。

47
AME

website のアドバイスに従ってください:

options(Java.parameters = "-Xmx1024m")
library(XLConnect)
31
Henrico

それでもXLSXファイルのインポートに問題がある場合は、このオプションを使用できます。 「Xmx1024m」での回答は機能せず、「-Xmx4g」に変更しました。

options(Java.parameters = "-Xmx4g" )
library(XLConnect)

この リンクは役に立ちました。

29
Maciej

openxlsxパッケージread.xlsx()を使用します。 rJavaに依存しないため、R自体のメモリ制限のみがあります。私はXLSXの記述とフォーマットについて詳しく調査していませんが、いくつかの有望なビネットがあります。大きなスプレッドシートを読む場合、うまく機能します。

@ Brad-Hornへのヒント。私もこれが最良の解決策だとわかったので、彼のコメントを答えに変えたところです!

14
vpipkt

1つの巨大なファイルではなく多くファイルを読み取るときにこのエラーが発生した場合、Java仮想マシンメモリをxlcFreeMemory()で解放することでこのエラーを解決できました。 、したがって:

files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
    wb <- loadWorkbook(...)
    ...
    rm(wb)
    xlcFreeMemory()  # <= free Java Virtual Machine memory !
}
10
user7843120

これは、R-Studioを再起動せずに同じRセッションを何度も繰り返し使用する場合に当てはまるようです。 R-Studioを再起動すると、プログラムに新しいメモリヒープを割り当てることができます。すぐにうまくいきました。

2
Lycone

この here で提案されているように、コードの最初の行でオプション関数を実行してください。私の場合、Rセッションを再起動して最初の行で実行したときにのみ機能しました。

options(Java.parameters = "-Xmx4g" )
library(XLConnect)
1

RJavaに依存するライブラリ(私の場合はRWekaなど)を使用しているときはいつでも、いつかはデフォルトのヒープスペース(512 MB)に到達することになります。これで、Javaを使用している場合、使用するJVM引数を知っています(2ギガバイトのRAMが必要な場合は-Xmx2048m)。ここでは、R環境でどのように指定するかが問題になります。

   options(Java.parameters = "-Xmx2048m")
   library(rJava)
0
Rahul Pandey