100個のノードを持つラティスを生成したいのですが、すべてのノードに同じ数の隣接ノードがあることを確認したいと思います。
しかし、私がそうするとき:
d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)
次に、ノードの多くに同じ数のネイバーがないことがわかります。
最初の列がノードを表し、2番目の列が接続を表すと仮定して、すべてのノードが同じ数の接続を持つようにする方法はありますか?
エッジリストを作成し、そこからグラフを作成できます。その場合、(指示された)にリンクされたネイバーのみを考慮すると仮定すると、次のようなことができます。
el <- do.call(rbind,
lapply(1:100,
function(e) {cbind(rep(e,10),
sample(setdiff(1:100, e),10))}))
d <- graph.edgelist(el)
これにより、ノードをリンクする10個のランダムノード(それ自体以外)が選択されます。
これは、のデフォルトのエッジ方向graph.lattice
が有向グラフに最適ではないためです。できることは、無向グラフを作成し、それを有向グラフに変換することです。
d <- as.directed(graph.lattice(100, 0, nei=10, directed=FALSE, circular=TRUE))
unique(degree(d, mode="in"))
# [1] 20
unique(degree(d, mode="out"))
# [1] 20
相互に関係のないエッジが必要な場合、最も簡単な(ただし読みにくい)ソリューションは次のとおりです。
d <- graph(sapply(1:100, function(i) {
rbind(i, ((i+1):(i+10)-1) %% 100 + 1)
}))
unique(degree(d, mode="in"))
# [1] 10
unique(degree(d, mode="out"))
# [1] 10