我想找到 1)网络的模块化并找到 2)每个社区中节点的身份。
我认为这是获得模块化的方法:
g <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
g <- add.edges(g, c(1,6, 1,11, 6, 11))
ebc <- edge.betweenness.community(g)
sizes(ebc)
#Community sizes
#1 2 3
#5 5 5
modularity(g,membership(ebc))
#[1] 0.5757576
但是在Gabor 的这个链接上,我得到了这个代码:
memberships <- list()
G <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
G <- add.edges(G, c(1,6, 1,11, 6, 11))
### edge.betweenness.community
ebc <- edge.betweenness.community(G)
mods <- sapply(0:ecount(G), function(i) {
g2 <- delete.edges(G, ebc$removed.edges[seq(length=i)])
cl <- clusters(g2)$membership
modularity(G, cl)
})
g2 <- delete.edges(G, ebc$removed.edges[1:(which.max(mods)-1)])
memberships$`Edge betweenness` <- clusters(g2)$membership
这似乎和我做的事情一样,我认为delete.edges
andclusters
是关于通过删除连接边然后获取每个组件中节点的 ID 将模块拆分为单独的组件。
虽然我有几个问题:
在@Gabor Csardil 的代码中,为什么
modularity
调用使用clusters(G)$membership
而ebc
不像我在示例中那样使用?有什么不同?(我会认为这会高估实际的模块化?)似乎也有另一种使用community.to.membership
代码返回了这个我不明白的
mods
错误,这也是我无法探索g2
并cl
看到更多正在发生的事情的部分原因:
delete.edges(G, ebc$removed.edges[seq(length = i)]) 中的错误:在 iterators.c:1809:无法创建迭代器,无效的边 id,无效的顶点 id