如何在 r 中为我的 GNgraph 提取成员向量?

how extract membership vector for my GNgraph in r?

我想使用 NMI 将我的社区检测算法与其他算法进行比较 methods.so 我正在用 sample_sbm() 制作一些图表,我定义为给我 10 个节点,并且在 block.sizes=c(3,3,4) 第一部分定义有社区,第一个有 3 个成员,第二个有 3 个,第三个有 4 个成员。 现在我想要 them.it 的成员向量应该是:1 1 1 2 2 2 3 3 3 3

最好的方法是什么?我正在考虑采用 3 个参数 c1、c2、c3,然后在 block.sizes() 中使用它们,这样我就可以使用 for 循环来构建成员资格vector.but看起来有点dirty.cause社区的数量应该是任意的。 如果你能给我一些更好的建议,我将不胜感激

library(igraph)
p<-cbind( c(1, 0,0), c(0, 1,0) ,c(0,0,1))
g <- sample_sbm(10, pref.matrix=p, block.sizes=c(3,3,4) )


#comunity detection algorithm
wc <- cluster_walktrap(g)
modularity(wc)

a=membership(wc)

根据原 question-asker 的评论进行更新:

我将块的大小存储在 my_block_sizes 向量中。然后我使用 rep.int 函数和 seq_along 函数根据块的大小创建成员向量。

library(NMI)
library(igraph)

my_block_sizes <- c(3,3,4)

# make a membership vector
membership_vector <- rep.int(seq_along(my_block_sizes), my_block_sizes)
membership_vector
[1] 1 1 1 2 2 2 3 3 3 3

p <- cbind(c(1,0,0), c(0,1,0), c(0,0,1))
g <- igraph::sample_sbm(10, pref.matrix=p, block.sizes=my_block_sizes)

# comunity detection algorithm
wc <- cluster_walktrap(g)
modularity(wc)

a <- membership(wc)

原回答:

我不是 100% 确定这就是您想要的,但根据您提供的信息,这可能会解决您的问题。

我使用wc对象的长度来确定社区检测算法检测到的社区数量,rep.int函数根据块的大小重复每个社区数量,我预先将其存储在 my_block_sizes 对象中。

library(NMI)
library(igraph)

my_block_sizes <- c(3,3,4)

p <- cbind(c(1,0,0), c(0,1,0), c(0,0,1))
g <- igraph::sample_sbm(10, pref.matrix=p, block.sizes=my_block_sizes)


#comunity detection algorithm
wc <- cluster_walktrap(g)
modularity(wc)

a <- membership(wc)

# make a membership vector
membership_vector <- rep.int(1:length(wc), my_block_sizes)
membership_vector
[1] 1 1 1 2 2 2 3 3 3 3