ОБНОВЛЕНИЕ после первоначальных комментариев автора вопроса:
Я храню размеры блоков в векторе 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