igraph找到指定形状的所有子图

时间:2016-11-14 20:32:01

标签: r igraph

我有兴趣找到所有" V"图中的子图,即如果添加额外边,将成为三角形的所有顶点三角形。有没有一种有效的方法可以用R的igraph版本来做到这一点?

1 个答案:

答案 0 :(得分:1)

这可以在sna包中找到;不确定是否有可能在igraph。在sna中,triad.classify会告诉你给出任意三个顶点的三元组的类型。要全部枚举它们,您需要找到三个顶点的所有组合并将其传递给triad.classify。然后,创建一个数据框,其中每一行给出三元组及其分类。然后将子集分配给您关心的三元组。如果你有很多顶点,这需要一段时间!您可以使用intergraph将igraph转换为网络对象。

以下是使用随机图表的示例:

library(sna); library(igraph); library(intergraph)
g <- sample_gnp(25,0.25, directed = T)
g <- asNetwork(g)
triads <- combn(1:network.size(g),3, simplify = F)
triad_census <- lapply(1:length(triads), 
                       function(x) triad.classify(g,tri=triads[[x]]))
triads <- data.frame(matrix(unlist(triads), nrow=length(triads), byrow=T),
                     triad = unlist(triad_census))
triads <- triads[which(triads$triad == "021D" | 
                       triads$triad == "021U" | 
                       triads$triad == "021C" |
                       triads$triad == "111D" |
                       triads$triad == "111U" |
                       triads$triad == "201"),]

head(triads)
   X1 X2 X3 triad
3   1  2  5  021C
4   1  2  6  111U
6   1  2  8  021U
8   1  2 10  021C
10  1  2 12  021C
12  1  2 14  021U