2

という名前の行列オブジェクトがあり、location3 つの列 ( IDlatitudelogitude) と 18,289 行があります。

#      ID    latitude     longitude  
#  320503    31.29530     120.5735  
#  310104    31.18852     121.4365  
#  310115    31.22152     121.5444  
#  110105    39.92147     116.4431  

各ID間のHaversine距離を計算したい。パッケージgeosphereでは、関数distm()は対称距離行列を作成できますが、その次元は 18289 x 18289 です。ただし、Rエラーが報告されましたcannot allocate vector of size 2.5 Gb

同様に、ffパッケージでは、

data.distance.ff <- ff(0, dim = c(18289, 18289))

ffエラーは発生しませんが、マトリックスに値を割り当てると、Rエラーが再び発生します。

data.distance.ff[1:18289, 1:18289] <- distm(location[, 2:3] 

エラー: サイズ 2.5 Gb のベクトルを割り当てることができません
さらに: 警告メッセージ:
1: マトリックス (0、ncol = n、nrow = n) 内:
2047Mb の合計割り当てに達しました: ヘルプ (memory.size) を参照してください
2: マトリックス (0 ) 内, ncol = n, nrow = n) : 2047Mb
の合計割り当てに達しました: help(memory.size) を 参照してくださいsize) 4: マトリックス (0, ncol = n, nrow = n) 内: 2047Mb の合計割り当てに達しました: help(memory.size) を参照してください



このエラーは次の方法で確認できます。

data.distance.ff[1:10000, 1:10000] <- distm(location[1:10000, 2:3] 

そして、このエラーが発生します:

エラー: サイズ 772.1 Mb のベクトルを割り当てることができません。

私の質問は次のとおりです。

  1. ffマトリックス オブジェクトに値を割り当てるコードが間違っていますか? ff代わりに、何か特別なものを使用してオブジェクトに 値を割り当てる必要がありますか?
  2. ffオブジェクトはストレージ要件を処理 できますか?
  3. ループを含まない適用関数を使用して距離を計算する別の方法を使用できますか? distm()この関数は対称であるため、必要に応じて 2 倍の大きさの行列を生成する ことがわかっています。
  4. ビッグデータを扱う他の方法はありますか?パッケージが Windows コンピュータでbigmemory動作しないようです。
4

0 に答える 0