Что мне интересно, возможно ли создать перекрывающиеся сообщества в igraph?Как создать перекрывающиеся сообщества в igraph?
df1: вершина списка, и его членство
EDIT: идентификатор ссылаться на имя вершины и членство относятся к вершинной Идентификатор сообщества, поэтому вершина 1
является принадлежат двум общинам: 3
и 2
df1<- structure(list(id = c(1L,2L,3L, 4L, 5L,6L, 7L, 8L,9L), membership = list(c(3, 2),c(2),c(1),c(4),
c(4, 1),c(2, 4),
c(1),c(1, 3),c(2,1,3))),
.Names = c("id","membership"),class = "data.frame", row.names = c(NA, -9L))
#id membership
#1 1 3, 2
#2 2 2
#3 3 1
#4 4 4
#5 5 4, 1
#6 6 2, 4
#7 7 1
#8 8 1, 3
#9 9 2, 1, 3
df2: edgelist с членством края
df2<- structure(list(id1 = c(1L,2L,5L,8L,9L,4L,6L),id2 = c(3L,5L,8L,1L,2L,3L,7L), membership = list(c(1),c(2),c(1,4),c(3,2),
c(1,3, 4),c(3),c(1,2))),
.Names = c("id1","id2","membership"),class = "data.frame", row.names = c(NA, -7L))
#id1 id2 membership
#1 1 3 1
#2 2 5 2
#3 5 8 1, 4
#4 8 1 3, 2
#5 9 2 1, 3, 4
#6 4 3 3
#7 6 7 1, 2
пожалуйста, считают, что мы хотим создать сообщество объект:
# diffrent membership vector from df1
mem <-sapply(1:max(sapply(df1$membership, function(x)length(x))),function(y){
unlist(lapply(df1$membership,function(x) x[y]))})
# [,1] [,2] [,3]
# [1,] 3 2 NA
# [2,] 2 NA NA
# [3,] 1 NA NA
# [4,] 4 NA NA
# [5,] 4 1 NA
# [6,] 2 4 NA
# [7,] 1 NA NA
# [8,] 1 3 NA
# [9,] 2 1 3
#create community objects for each membership vector
com<-sapply(1:ncol(mem),function(x) create.communities(membership=mem[,x], algorithm = NULL, merges = NULL,
modularity = NULL))
# com
#[[1]]
#Graph community structure calculated with the unknown algorithm
#Number of communities: 4
#Membership vector:
#[1] 3 2 1 4 4 2 1 1 2
# [[2]]
#Graph community structure calculated with the unknown algorithm
#Number of communities: NA
#Membership vector:
#[1] 2 NA NA NA 1 4 NA 3 1
#[[3]]
#Graph community structure calculated with the unknown algorithm
#Number of communities: NA
#Membership vector:
#[1] NA NA NA NA NA NA NA NA 3
**Edit**:graph=graph.data.frame(df2,directed=FALSE)
sapply (1:length(com),function(x) plot.communities(com[[x]],graph))
, что последняя строка дает мне ошибку Error in membership(x) : Cannot calculate community membership
, поскольку она не может вычислить количество общин с НС включен в состав сообщества
Итак, что было бы решением для создания этих перекрывающихся сообществ в igraph? Спасибо заранее и извините за мой длинный вопрос.
Это не поддерживается в igraph AFAIK. 'create.communities' не работает для перекрывающихся сообществ. –
спасибо за комментарий @GaborCsardi, есть ли другой способ иметь перекрывающиеся сообщества? –
Я не уверен, что вы пытаетесь сделать здесь, но вы можете определить свой собственный класс для своих сообществ. Например. просто поместите в список разные группы. –