使用R中的igraph获取连接的组件

Din*_*esh 5 r graph igraph connected-components

我想找到图形的所有连通组件,其中组件具有多个元素.

使用the clusters赋予不同集群的成员资格并使用cliques不提供连接的组件.

这是一个跟进

R中的多个列表交集

我的主要目标是找到所有具有相互共同元素的列表组.

提前致谢!

use*_*650 10

您可以使用结果clusters根据群集大小对节点进行子集化.

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# 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"
Run Code Online (Sandbox Code Playgroud)

  • 只是为了好玩,一旦你拥有集群,这是另一种方法:`grps < - with(cl,duplicated(membership)| duplicated(membership,fromLast = TRUE))`后跟`unname(split(V(g)$ name [ grps],cl $ membership [grps]))` (3认同)