选择包含特定叶子的子图(igraph)

时间:2015-10-13 17:37:26

标签: r igraph

我有一个这样的图表:

An example graph

我需要提取图的一部分,其中只包含从根(n2)到红叶的所有路径。我发现可以通过R中的以下命令提取节点的邻居,这里是n6和n7:

if(myObject.doesExist()){
   //safely use myObject
}

然后梳理subg1和subg2。

但问题是: 1.我的条件是直到达到像n2(根)这样的节点,而不是等级。

%%%%%%%%%%%%%%%%%%%%%%%%%

我也试过以下但我遇到了两个问题:

level = 2
subg1 <- graph.neighborhood(cGraph, level, "n6", mode=c('in'))
subg2 <- graph.neighborhood(cGraph, level, "n7", mode=c('in'))
  1. get.all.shortest.paths没有给出我的所有路径,它给出了最短的路径。例如,图表有从n2到n6的2条路径。
  2. 最终图表与原始图表的属性不同。
  3. 你能帮助别人吗? 感谢

2 个答案:

答案 0 :(得分:2)

最后我找到了它:

finalshortest = all_simple_paths(cGraph, from = c("n2"), to = V(cGraph)[color=="red"],mode="out")
V(cGraph)$keep <- "NO"
for (p in finalshortest) { V(cGraph)[p]$keep <- "YES" }
finalsubgraph<-induced.subgraph(cGraph, which(V(cGraph)$keep=="YES"))

再次感谢您帮助Tamas

答案 1 :(得分:0)

我担心你的问题没有得到最全面的规定。首先,你说你需要提取图表的一部分,其中只包含红叶&#34;。显然,该图仅包含节点n6和n7(因为只有那些是红色的)。既然你说&#34; n1,n3和n5的节点应该被删除&#34;,看起来你真的想要一个包含节点n6和n7之间的最短路径的图,< em>忽略边缘方向。如果这真的是你想要的,那么使用get.shortest.path函数找到n6和n7之间的最短路径,然后使用induced.subgraph提取仅包含位于最短路径之间的节点的子图n6和n7。