iGraph编辑顶点ID

时间:2013-12-03 05:01:56

标签: r igraph

这个问题的动机有些微不足道,但我希望它能帮助我清除一些关于igraph和顶点的混乱。我为这个长度道歉,但承诺这是一个快速阅读。

我有一个问题,即使用graph.formula()从已经标记过顶点的图片中重新创建图表非常简单,所以很自然,除非我非常小心我将顶点输入图形的顺序。 formula(),顶点ID和Name不匹配。

想要它的人的图片图片:

enter image description here

代码:

g<-graph.formula(1-2,1-4,1-6,3-5,3-5,3-6,3-7,4-5)
> get.edgelist(g)
     [,1] [,2]
[1,] "1"  "2" 
[2,] "1"  "4" 
[3,] "1"  "6" 
[4,] "4"  "5" 
[5,] "6"  "3" 
[6,] "3"  "5" 
[7,] "3"  "7" 
> get.edgelist(g, names=FALSE)
     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    3    6
[5,]    4    5
[6,]    5    6
[7,]    5    7

现在,对于这个图,我有兴趣找到最短的路径并使用我自己的顶点名称,所以我输入:

>get.shortest.paths(g,from="1",to="5")  
  [[1]]  
  [1] 1 3 6

但是此输出对应于顶点ID,我对使用顶点名称感兴趣,所以我尝试:

 >V(g)$name [as.vector(get.shortest.paths(g,from="1",to="5"))]  
Error in V(g)$name [as.vector(get.shortest.paths(g, from = "1", to = "5"))] :   
  invalid subscript type 'list'

以及其中的一些变体,但我似乎无法根据顶点名称获取我的列表。

所以有两个问题:
1)如何让它显示我根据顶点名称获得的顶点ID列表?我在这里遗漏了一些明显的东西...... 2)有没有办法重新分配我的顶点ID?我没有找到任何关于此的信息,所以我认为这是不可能的,但它将是我的问题的最简单的解决方案,而不是通过属性。

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

您的问题是get.shortest.paths生成一个列表,因为可能有多个最短路径。因此,在只有一条最短路径的情况下,使用[[访问列表数据可以解决问题:

V(g)$name[get.shortest.paths(g,from="1",to="5")[[1]]]
#[1] "1" "4" "5"

如果您有多个最短路径,这在实际示例中很可能,那么使用起来会更安全:

lapply(get.shortest.paths(g,from="1",to="5"),function(x) V(g)$name[x] )
#[[1]]
#[1] "1" "4" "5"