R 为每个节点生成邻居数相等的有向晶格

R 为每个节点生成邻居数相等的有向晶格,r,igraph,R,Igraph,我希望生成一个包含100个节点的晶格,但希望确保所有节点具有相同数量的邻居 然而,当我这样做时: d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE) get.edgelist(d) 然后我可以看到,许多节点的邻居数并不相同 假设第一列表示节点,第二列表示连接,有没有办法确保每个节点都有相同数量的连接?您可以创建一个edgelist并从中生成图形。在这种情况下,假设您只考虑链接到(定向)的邻居,那么您可以做一些类似的事情: el &

我希望生成一个包含100个节点的晶格,但希望确保所有节点具有相同数量的邻居

然而,当我这样做时:

d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)
然后我可以看到,许多节点的邻居数并不相同


假设第一列表示节点,第二列表示连接,有没有办法确保每个节点都有相同数量的连接?

您可以创建一个edgelist并从中生成图形。在这种情况下,假设您只考虑链接到(定向)的邻居,那么您可以做一些类似的事情:

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

el这是因为
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您建议如何处理其中两个节点只有一个邻居的事实?但为什么每个节点有10个邻居时,其度数为20?因为到处都有相互的边。但是如果你不想要相互的边,可以使用第二种方法。同样的方法可以应用于数量不均匀的邻居吗?我想要一个格子图,其中每个节点正好有3个邻居。但当我绘制这样一个图时,每个节点有6条边。有没有一种方法可以得到一个只有3条边的图?这是一个随机图。我误解了,以为那就是你想要的。
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