我正在使用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
?
答案 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"