1

原来的问题在这里

如何计算具有 6 个顶点和 5 条边的图具有三角形的概率?

我想做一个模拟。我将创建triangle图然后生成带有顶点和边的1,000随机图,并找到三角形的分布。n=6m=5

现在我g用一个三角形创建了一个图形,该subgraph_isomorphisms()函数返回6同构三角形。然后我使用该unique()函数来找到一个三角形。但结果是6

library(igraph) 

g          <- graph_from_literal( A--B, B--C, C--A, B--D, D--E, E--F)
triangle   <- graph_from_literal( A--B, B--C, C--A) 

ntriangles <- 0

iso <- subgraph_isomorphisms(triangle, g) 

motifs <- lapply(iso, function (x) { induced_subgraph(g, x) }) 
ntriangles <- length(unique(motifs))  
ntriangles

问题。 如何从一组同构三角形中只返回一个三角形?

4

1 回答 1

1

一种解决方案可能是将每个主题的边缘列表聚合到一个 data.frame 中,并使用dplyr'sdistinct过滤唯一值:

library(dplyr)
edgelist <- do.call(rbind,
                    lapply(1:length(motifs), function(x) get.edgelist(motifs[[x]])))
edgelist <- data.frame(edgelist) %>% distinct() %>% as.matrix()
graph_from_edgelist(edgelist, directed = F)

这将返回:

> graph_from_edgelist(edgelist, directed = F)
IGRAPH e275587 UN-- 3 3 -- 
+ attr: name (v/c)
+ edges from e275587 (vertex names):
[1] A--B A--C B--C

编辑 这是另一种方法,它更短且更接近建议的 OP:

motifs <- lapply(iso, function (x) { get.edgelist(induced_subgraph(g, x)) })   
ntriangles <- length(unique(motifs))  
ntriangles

这里我简单地提取包含顶点的边缘列表。graph_id如果没有存储在 igraph-object 中的唯一信息和其他信息,unique将返回以下内容:

> length(unique(motifs))
[1] 1

于 2019-08-23T09:33:11.047 回答