0

大きなグラフ (200K ノード) の共引用行列を見つけます。

cocitation(graph)

すると問題発生

Error in cocitation(graph):At vector.pmt:125 : cannot init vector, Out of memory

この問題を解決するにはどうすればよいですか?

どうもありがとうございました

4

2 に答える 2

3

問題は、igraphが結果を格納するために200Kx200Kの行列を割り当てようとしていることです。その行列のほとんどの要素はゼロである可能性がありますが、igraphには個別のスパース行列データ型がないため、4 x1010のすべての要素を収容するためにメモリのチャンクを割り当てる必要があります-これは機能しません。

行列全体を一度に必要とせず、代わりにその行列の一般的な統計に関心がある可能性が非常に高いため、ゼロから頂点の数から1を引いた数になるforループを簡単に作成できます(igraph以降インデックスはゼロから始まります-これはRインターフェイスでは0.6で変更されることに注意してください)、引用行列の1行を計算します。

for (i in 0:vcount(g)-1) {
    row <- cocitation(g, v=i)
    # Do whatever you want with the row here
}
于 2012-02-17T10:22:05.790 に答える
2

メモリ不足の問題に対する一般的な解決策は、次のいずれかです。

  1. メモリをあまり消費しないように、コードをスマートに処理してください。

  2. より多くの RAM を購入してください (多くの場合、気まぐれに費やす時間よりも安価です)。

  3. 並列パッケージの 1 つを使用して、複数のマシン間で負荷を分散します。

  4. bigmemoryパッケージを使用します。

  5. データセットのサブセットを使用します。

この場合、最後のオプションがおそらく最善の策であるという Ian Fellows の意見に同意します。

于 2012-02-17T08:18:41.883 に答える