2015-05-23 28 views
5

Mi piacerebbe trovare tutti i componenti collegati di un grafico in cui i componenti hanno più di un elemento.ottenere componenti collegati utilizzando igraph in R

utilizzando clusters fornisce l'appartenenza a diversi cluster e utilizzando cliques non fornisce i componenti connessi.

Si tratta di un follow-up da

multiple intersection of lists in R

Il mio obiettivo principale era quello di trovare tutti i gruppi di liste che hanno elementi in comune con l'altro.

Grazie in anticipo!

+0

Avete bisogno di 'clusters'? – user20650

+0

@ user20650 si. grappoli con più di un elemento. scusa intendevo gruppi invece di connectedComp. Modificata la domanda – Dinesh

+0

La funzione '? Clusters' restituisce l'appartenenza e la dimensione del cluster - dovrebbe essere abbastanza semplice da suddividerla per includere solo i cluster con più di un nodo – user20650

risposta

9

È possibile utilizzare i risultati da clusters per suddividere i nodi in base alle dimensioni del cluster.

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

Solo per divertimento, ecco un altro approccio una volta che hai i cluster:' grps <- con (cl, duplicato (appartenenza) | duplicato (membership, fromLast = TRUE)) 'seguito da 'unname (split (V (g) $ name [grps], cl $ membership [grps]))' – Jota