2

R でXLConnect (Mirai Solutions) を使用して JVM メモリに問題が発生しています。

loadWorkbookまたはを使用して R にデータを正常にロードできますreadWorksheetFromFileが、エクスポート関数 ( 、 など) を使用したエクスポート中に JVM に書き込まれている間に大きなデータ (約 3MB のデータ フレーム) がスタックしwriteNamedRegionwriteWorksheetToFileR が応答を停止します。

を使用して Java パラメータをリセットしました。options(java.parameters = "-Xmx1500m")これにより、Excel にエクスポートできるデータ フレームのサイズが増加しましたが、R はまだ約 1MB 遅くなり、約 3MB では機能しません。

私は、32 ビットの Office ソフトウェアと 32 ビットの Java を搭載した 64 ビットの Windows 7 システムを、8 GB の RAM を搭載したマシンで使用しています。3MB は、エクスポートの開始時にあると思われる JVM の空きメモリが約 750 MB であることに比べて、それほど大きくないように見えます ( で確認xlcMemoryReport)。

アイデア?

4

1 に答える 1

2

3MBの参照値を考えると、10列x 40k行の次元の数値変数でdata.frameを書き込もうとしていると結論付けています(または同等;そのようなdata.frameのobject.sizeは約3.2MBになります) .

xls (BIFF8) ファイルと xlsx (OOXML) ファイルのどちらを書き込もうとしているかによって、メモリ要件は大きく異なります。その理由は、xlsx ドキュメントは実際には圧縮された XML ファイルであり、Apache POI ( XLConnect で使用される基礎となる Java API ) はxmlbeansを使用してそれらを操作するためです。これは非常に大量のメモリを消費する可能性があります。一方、BIFF8 はバイナリ データ形式であり、必要なメモリが少なくて済みます。

前述の寸法の data.frame を最大 .xlsx ドキュメントに書き込むことができるはずです。1024m のヒープ サイズ。

options(java.parameters = "-Xmx1024m") # required BEFORE any JVM is initialized in R
require(XLConnect)
tmp = as.data.frame(matrix(rnorm(4e5), ncol = 10))
writeWorksheetToFile(tmp, file = "test.xlsx", sheet = "test")

... RStudio、XLConnect 0.2-0、および JRE 1.6.0_25 で R 2.15.1 32 ビットを使用 (4 GB の RAM を搭載した 32 ビット Windows XP で実行)。

Apache POI 側のメモリ使用量に関するより詳細な議論に関心がある方は、次の議論があります: http://apache-poi.1045710.n5.nabble.com/HSSF-and-XSSF-memory-usage- some-numbers-td4312784.html

于 2012-08-02T15:01:41.813 に答える