2

私は自分のパッケージ内で data.table パッケージを使用し、NAMESPACE および DESCRIPTION ファイルに data.table 名前空間をインポートします。私の関数の1つで、data.table関数を使用してdata.frameをdata.tableに変換します

dt <- data.table(df)

しかし、関数を呼び出すと、 data.table() を呼び出す時点でメモリ使用量が即座に急増し、R が応答を停止します。関数内のコードは、行ごとに低メモリ消費で実行すると正常に動作します。また、関数内に library(data.table) を配置すると、すべて問題ありません。関数に library(data.table) を入れないようにして、代わりに依存関係を宣言しようとしていました。しかし、その方法では何かがうまくいかないようです。Mac OS X 10.6.8 で R-2.14.0 を実行しています

理由を説明できる人はいますか?どうすればそれを修正できますか (関数内で library(data.table) を使用せずに)?

4

1 に答える 1

3

順不同のランダムな推測:

Imports または Depends フィールドは、説明のみで使用してみてください。NAMESPACE にもインポートする必要はないと思いますが、間違っているかもしれません。なぜそれがメモリの使用を説明するのか、わかりません。

とはdf? それは大きいですか、何らかの形で再帰的ですか、それとも奇妙ですか? str(df)可能であれば、それについて教えてください。

as.data.table(df)より速いのはどれか試してみてくださいdata.table(df)。しかし、あなたの問題はそれとは異なるようです。

関数呼び出しが繰り返し呼び出されていますか? df繰り返し変換するとメモリが使い果たされる理由はわかりますdtが、呼び出すだけlibrary(data.table)で高速になる理由はわかりません。

R を で開始して、特に、起動時に(関数 masking を含む場合があります) ロードされていR --vanillaないことを確認してください。独自のパッケージを開発した場合、ある種の関数名の競合、またはパス上のパッケージの順序がもっともらしく聞こえます。.Rdatadata.tablesearch()

それ以外の場合は、さらに情報が必要になります。これに似たようなことが起こった、または以前に報告されたことを覚えていません。

そして、どのバージョンdata.tableを使用していますか?R-Forge の v1.8.1 には次のバグ修正があります (まだ CRAN にはありません)。

  • data.tableセットアップ コードを から.onAttachに移動し、 がパッケージ内から単にed の.onLoadときにも実行されるようにし、欠落しているオプションに関連する #1916 を修正しました。data.tableimportdata.table

ただし、CRAN の 1.8.0 を使用していて、依存ではなくインポート (のみ) を行っている場合は、メモリ消費量の急増ではなく、オプションの欠落に関するエラーが発生すると予想されます。

于 2012-05-17T09:02:21.997 に答える