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

问题描述 投票:0回答:1

我正在使用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

r igraph
1个回答
1
投票

get_diameter的文档说:

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

所以它返回一个路径。另一方面,shortest_paths允许列出to顶点。它将返回一个最短路径列表,一个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"
© www.soinside.com 2019 - 2024. All rights reserved.