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