非常に単純な計算をしようとしましたが、原因がはっきりしないメモリ不足のメッセージが表示されました。これが私が望むものです: スモールワールド モデル (watts.strogatz.game) といくつかの p 値について、nsamp
多くのグラフを作成し、最初のノードと反対側のノード間の距離を計算しますn/2
。の場合nsamp = 1
、すべて正常に動作します。以上の値に設定すると、最初のラウンド ( ) で、つまり最小の p 値 (0.01)100
で「メモリ不足」エラーが発生します。i=1, j=5
設定nsamp=10
してもエラーにはなりません (え?? それには ? が含まれているはずではありませんi=1, j=5
か?)。すべての大きなオブジェクト (graph、len) を明示的に削除しようとしましたが、役に立ちませんでした。ここに何かアイデアはありますか?コードは次のとおりです。
require(igraph)
probs <- c(1:25)*0.01
n = 1000
target <- n/2
nsamp = 100
for(i in c(1:length(probs))){
for(j in c(1:nsamp)){
graph <- watts.strogatz.game(dim=1, size=n, p=probs[i], nei=4)
shortest.paths(graph, v=V(graph)[1], to=V(graph)[target])
len <- get.all.shortest.paths(graph, from=V(graph)[1])
rm(graph)
#The number of shortest paths between 1 and target can be found in
numbPathsBetw1AndTarget <- len$nrgeo[target]
#In len$res there are all shortest paths between node 1 and all other
#nodes. It comes as a list which at each point contains a vector of
#so we need to use lapply to find out which of
#the lists are of interest to us.
lengths <- unlist(lapply(len$res, function(x) length(x)))
rm(len)
}
}
メモリを増やすことができることは承知していますが、nsamp が小さい場合はすべて問題ないことがわかります。
編集:再現性が非常に低いため、メモリリークではなく、グラフの構成が悪いと思われます。i=1 の場合は常に発生しますが、j が異なる場合です。したがって、適用するグラフの直径get.all.shortest.paths
または最短パスの数に固有の上限はありますか?
編集 2: R を再起動した後、再現不可能なエラーは消えました。おそらく、以前の計算によって RAM が既に詰まっていたのでしょう。