igraph:将列表转换为顶点序列

时间:2019-02-28 13:53:40

标签: r igraph

我正在使用igraph的R实现。 我不明白为什么get_diamenter()返回一个igraph.vs对象,而shortest_paths()$vpath返回一个list对象。 我试图绘制两个节点之间的最短路径。我可以画出网络直径

diam <- get_diameter(net_vc, directed=F)
vcol <- rep("gray40", vcount(net_vc))
vcol[diam] <- "gold"

但是我不能以类似的方式绘制最短路径:

sp = shortest_paths(net_vc, from=V(net_vc)$Name=="I0", to=V(net_vc)$Name=="I11")
sp <- sp$vpath
vcol <- rep("gray40", vcount(net_vc))
vcol[sp] <- "gold"

它返回: Error in vcol[sp] <- "gold" : invalid subscript type 'list'

如何将这个列表转换为顶点序列,以便as.vector(sp)返回顶点的位置,以便索引vcol

1 个答案:

答案 0 :(得分:1)

get_diameter的文档说:

  

get_diameter返回具有实际直径的路径。如果有   直径长度的许多最短路径,然后返回   找到第一个。

因此它返回一个路径。另一方面,shortest_paths允许包含to个顶点的 list 。它将返回最短路径列表,igraph.vs列表,to列表中的每个顶点。即使您在shortest_paths中使用单个顶点调用to,也会获得一个列表。因此,要以所需的方式设置颜色,您需要引用列表的第一个(也是唯一一个)元素。您需要:

sp = shortest_paths(net_vc, from=V(net_vc)$Name=="I0", to=V(net_vc)$Name=="I11")
sp <- sp$vpath[[1]]
vcol <- rep("gray40", vcount(net_vc))
vcol[sp] <- "gold"