I would like to find all the connected components of a graph where the components have more than one element.
using the clusters
gives the membership to different clusters and using cliques
does not give connected components.
This is a follow up from
multiple intersection of lists in R
My main goal was to find all the groups of lists which have elements in common with each other.
Thanks in advance!
You can use the results from components
to subset your nodes according to the component size.
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)
# get components
cl <- components(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"