我想生成一个包含100个节点的网格,但是希望确保所有节点都有相同数量的邻居。
然而,当我这样做时:
d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)
然后我可以看到许多节点没有相同数量的邻居。
是否有任何方法可以确保每个节点具有相同数量的连接,假设第一列表示节点和第二列连接?
答案 0 :(得分: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个随机节点(除了它自己)以将节点链接到。
答案 1 :(得分: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