1
library(igraph)
g=graph.famous("Zachary")
c=edge.betweenness.community(g)
a=membership(c)
c$merges
b=community.to.membership(g,c$merges,steps=33)

[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4

[1] 9 4 0 0 0 0 5 0 3 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 7 0 0 8

我希望 b 与 members(c) 相同,因为有 33 个步骤。但是为什么 b 与成员资格(c)不同?

4

1 回答 1

2

这似乎是 igraph 中的一个错误,因为即使以下内容也不起作用:

> library(igraph)
> g <- graph.full(3)
> c <- edge.betweenness.community(g)
> community.to.membership(g, c$merges, steps=1)$membership

这给了我一个成员向量1 2 0,这显然是错误的;正确的结果应该是1 0 0or 0 1 1。实际上,您可以通过从合并矩阵中减去 1 来修复该错误:

> g <- graph.famous("zachary")
> c <- edge.betweenness.community(g)
> membership(c)
[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> community.to.membership(g, c$merges-1, steps=29)$membership
[1] 0 0 2 0 3 3 3 0 1 4 3 0 0 0 1 1 3 0 1 0 1 0 1 1 2 2 1 2 2 1 1 2 1 1

这两个成员向量本质上是相同的(有一点重新索引)。请注意,您只需要 29 步即可达到相同的隶属度向量,因为图中有 34 个顶点,并且您有 5 个社区,因此您需要执行 34-5=29 次合并。执行 33 个步骤只会让您获得一个社区。

我将在 igraph 的错误跟踪器中为此提交错误报告。

于 2012-12-29T09:56:49.870 回答