18

2 つのデータフレームをマージしようとしています。1 つには 33 変数の 908450 観測があり、もう 1 つは 2 変数の 908450 観測があります。

dataframe2 <-merge(dataframe1, dataframe2, by="id")

作業メモリから他のすべてのデータフレームをクリアし、次のコードを使用してメモリ制限をリセットしました (24 GB の RAM を搭載した新しいデスクトップの場合)。

memory.limit(24576)

しかし、私はまだエラーが発生していますCannot allocate vector of size 173.Mb

この問題を回避する方法について何か考えはありますか?

4

2 に答える 2

23

私のコメントをフォローアップするには、data.table. 説明するために、データに一致する簡単な例をまとめました。

library(data.table)

dt1 <- data.table(id = 1:908450, matrix(rnorm(908450*32), ncol = 32))
dt2 <- data.table(id = 1:908450, rnorm(908450))
#set keys
setkey(dt1, id)
setkey(dt2, id)
#check dims
> dim(dt1)
[1] 908450     33
> dim(dt2)
[1] 908450      2
#merge together and check system time:
> system.time(dt3 <- dt1[dt2])
   user  system elapsed 
   0.43    0.03    0.47 

そのため、マージに 1/2 秒もかかりませんでした。思い出しながらビフォーアフターのスクリーンショットを撮りました。マージ前は、3.4 ギガの RAM を使用していました。合体したら3.7に跳ね上がって横ばいになりました。それよりもメモリ効率や時間効率の良いものを見つけるのは難しいと思います。

前: ここに画像の説明を入力

後:ここに画像の説明を入力

于 2012-07-19T16:15:17.293 に答える
2

私が考えることができる限り、3つの解決策があります:

  • データテーブルを使用する
  • スワップ メモリを使用する (*nix マシンでは調整可能)
  • サンプリングを使用する
于 2012-07-19T16:03:41.243 に答える