如何在 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
我想使用 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