最初的问题是here。
如何计算具有6个顶点和5个图的图的概率 边缘有一个三角形?
我想进行模拟。我将创建triangle
图,然后生成具有1,000
顶点和n=6
边的m=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
问题。 如何仅从同构三角形集中返回一个三角形?
答案 0 :(得分:1)
一种解决方案可能是将每个主题的边缘列表聚合到data.frame中,并使用dplyr
的{{1}}来过滤唯一值:
distinct
这将返回:
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)
编辑这是另一种方法,它更短,更接近建议的OP:
> 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
在这里,我只是提取包含顶点的边列表。没有唯一的motifs <- lapply(iso, function (x) { get.edgelist(induced_subgraph(g, x)) })
ntriangles <- length(unique(motifs))
ntriangles
和其他信息存储在igraph对象中,graph_id
将返回以下内容:
unique