这个问题的动机有些微不足道,但我希望它能帮助我清除一些关于igraph和顶点的混乱。我为这个长度道歉,但承诺这是一个快速阅读。
我有一个问题,即使用graph.formula()从已经标记过顶点的图片中重新创建图表非常简单,所以很自然,除非我非常小心我将顶点输入图形的顺序。 formula(),顶点ID和Name不匹配。
想要它的人的图片图片:
代码:
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?我没有找到任何关于此的信息,所以我认为这是不可能的,但它将是我的问题的最简单的解决方案,而不是通过属性。
感谢您的任何意见!
答案 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"