我希望找到一个网络的模块化,并找到每个社区中节点的身份。
我认为这是获得模块化的方法:
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
和clusters
是通过删除连接边,然后在每个组件中获取节点的ID,将模块分割成单独的组件。
虽然我有几个问题:
modularity
调用使用clusters(G)$membership
,而不是像我在我的示例中那样使用ebc
?有什么不同?(我原以为这会高估实际的模块化?)似乎也有使用community.to.membership
的替代方法。mods
代码返回我不理解的错误,这在一定程度上是为什么我不能探索g2
和cl
来了解更多正在发生的事情:Delete.edges中的错误(G,ebc$removed.edgesseq(长度= i)):At iterators.c:1809 :无法创建迭代器,无效的边id,无效的顶点id
发布于 2013-01-15 14:52:45
一般的答案是wiki中的代码已经过时了。它适用于0.5.x版,但不适用于0.6.x版。更具体而言:
membership(ebc)
。delete.edges()
行中减去顶点ids。https://stackoverflow.com/questions/14337391
复制相似问题