2015-05-23 28 views
5

Chciałbym znaleźć wszystkie połączone komponenty wykresu, na których elementy składają się z więcej niż jednego elementu.pobierz podłączone komponenty używając igraph w R

użycie clusters daje członkostwo dla różnych klastrów i użycie cliques nie daje podłączonych komponentów.

ten jest kontynuacją od

multiple intersection of lists in R

Moim głównym celem było znalezienie wszystkich grup list, które mają elementy wspólne ze sobą.

Z góry dzięki!

+0

zrobić trzeba 'clusters'? – user20650

+0

@ user20650 yes. klastry z więcej niż jednym elementem. Przepraszam, miałem na myśli klastry zamiast connectComp. Edytowane pytanie – Dinesh

+0

Funkcja '? Clusters' zwraca członkostwo i rozmiar klastra - powinna być dość łatwa do podzbioru, aby zawierała tylko klastry z więcej niż jednym węzłem – user20650

Odpowiedz

9

Możesz użyć wyników z clusters do podziału węzłów zgodnie z rozmiarem klastra.

library(igraph) 

# example graph 
set.seed(1) 
g <- erdos.renyi.game(20, 1/20) 
V(g)$name <- letters[1:20] 
par(mar=rep(0,4)) 
plot(g) 

enter image description here

# get cluster 
cl <- clusters(g) 
cl 
# $membership 
# [1] 1 2 3 4 5 4 5 5 6 7 8 9 10 3 5 11 5 3 12 5 
# 
# $csize 
# [1] 1 1 3 2 6 1 1 1 1 1 1 1 
# 
# $no 
# [1] 12 


# loop through to extract common vertices 
lapply(seq_along(cl$csize)[cl$csize > 1], function(x) 
             V(g)$name[cl$membership %in% x]) 
# [[1]] 
# [1] "c" "n" "r" 
# 
# [[2]] 
# [1] "d" "f" 
# 
# [[3]] 
# [1] "e" "g" "h" "o" "q" "t" 
+3

Dla zabawy, oto inne podejście, gdy masz klastry:' grps <- z (cl, duplikowane (członkostwo) duplikowane (członkostwo, fromLast = TRUE)) 'następuje 'unname (split (V (g) $ name [grps], cl $ membership [grps]))' – Jota