1

100個のノードを持つラティスを生成したいのですが、すべてのノードに同じ数の隣接ノードがあることを確認したいと思います。

しかし、私がそうするとき:

d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)

次に、ノードの多くに同じ数のネイバーがないことがわかります。

最初の列がノードを表し、2番目の列が接続を表すと仮定して、すべてのノードが同じ数の接続を持つようにする方法はありますか?

4

2 に答える 2

1

エッジリストを作成し、そこからグラフを作成できます。その場合、(指示された)にリンクされたネイバーのみを考慮すると仮定すると、次のようなことができます。

el <- do.call(rbind,
              lapply(1:100,
                     function(e) {cbind(rep(e,10),
                                        sample(setdiff(1:100, e),10))}))
d <- graph.edgelist(el)

これにより、ノードをリンクする10個のランダムノード(それ自体以外)が選択されます。

于 2013-01-22T22:29:58.790 に答える
1

これは、のデフォルトのエッジ方向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
于 2013-01-23T02:58:51.013 に答える