提取带标签的 Igraph 中的所有三角形
Posted
技术标签:
【中文标题】提取带标签的 Igraph 中的所有三角形【英文标题】:Extract All Triangles in Igraph with Labels 【发布时间】:2016-05-31 19:35:14 【问题描述】:我创建了一个有 1000 条边的 igraph。我的目标是提取在该 igraph 中找到的所有三角形,但要包括标签而不是数字。我还希望它采用具有 3 列的数据框形式(三角形的每个节点一个)
我尝试过简单地调用:
triangles(graph)
这会返回一个列表,其中包含所有名称的列表:
+ 28431/204 vertices, named:
[1] node_a
[2] node_b
[3] node_c
[4] node_a
[5] node_b
[6] node_d
[7] node_a
[8] node_b
[9] node_e
[10] node_a
+ ... omitted several vertices
当我尝试时:
adjacent.triangles(graph)
它返回所有的数字,但不返回节点的名称:
[1] 15 103 45 121 152 78 325 325 3 35 90 0 488 283 3 0 325 325 325 325 78 21 190 3
[25] 133 0 47 167 167 6 3 325 505 415 0 36 78 325 78 78 90 6 206 6 36 0 78 49
我需要通过 igraph 找到一个函数,它可以给我以下格式的三角形:
COL1 COL2 COL3
node_a node_b node_c
node_a node_b node_d
node_a node_b node_e
node_f node_g node_h
任何帮助都会很棒,谢谢!
【问题讨论】:
【参考方案1】:您可以使用 clique 函数(假设 g 是您的图表),
cl.tri=cliques(g,min=3,max=3)
找到大小为三(三角形)的集团,然后将它们组装成一个数据框,
df<-lapply(cl.tri,function(x)V(g)$name[x])
df2=data.frame(matrix(unlist(df),ncol=3,byrow=T))
【讨论】:
谢谢。那么我是否只需进行索引匹配以查看标签是什么? 是的,您可以在创建数据框之前执行类似 lapply(cl.tri,function(x)V(g)$names[x]) 的操作,或者 apply(df, 2、function(x)V(g)$names[x]) 之后。可能有一种方法可以让 cliques 函数直接返回标签,但我不确定。 这是一个很好的开始,谢谢。当我尝试此操作时,虽然在运行 df=data.frame(matrix(unlist(cl.tri),ncol=3,byrow=T)) 时出现错误,但我尝试了第一个函数 嘿尼克,您可以编辑您的问题以包含一个完整的工作示例吗?否则我只需要推断问题所在。我上面的回答应该使用 V(g)$name[x] 而不是 V(g)$names[x]。这取决于您如何存储节点的名称,但我认为 igraph 默认值在顶点属性“名称”中。 那是错误!谢谢瑞恩。如果需要,您可以对我发布的问题进行回答以获得正确答案,或者我可以删除问题....由您决定以上是关于提取带标签的 Igraph 中的所有三角形的主要内容,如果未能解决你的问题,请参考以下文章
HTML / CSS - 在导航中的活动选项卡底部添加一个小三角形或箭头