如何从有向图最短路径提取边属性?解决无法抵达终点问题
解决igraph提取有向图最短路径边属性的问题
看起来你遇到的核心问题是调用shortest_paths时用错了图对象,导致无法找到目标路径!我们一步步来解决:
首先看你的代码细节:你创建的图对象是g,但第二次调用shortest_paths时写的是g1(警告信息里明确显示shortest_paths(g1, 1, 4,...))——这应该是笔误,换成正确的图对象g就能得到你预期的结果。
修正后的完整代码
library(igraph) gdf <- data.frame(from = c(1,2,3,5), to = c(2,3,4,3), id = c("A","B","C","D")) g <- graph_from_data_frame(gdf, directed = TRUE) # 注意这里用的是图对象g,不是g1 idx <- shortest_paths(g, 1, 4, output = "epath")$epath[[1]] igraph::edge_attr(g, "id", idx)
运行这段代码会返回你想要的结果:
[1] "A" "B" "C"
额外排查技巧
如果以后再遇到类似的"无法到达顶点"警告,可以用以下方法排查:
- 验证顶点可达性:用
reachable_vertices检查起点能到达的所有顶点,确认终点在其中:reachable_vertices(g, 1)$reachable # 输出:[1] 1 2 3 4,说明顶点4确实可达 - 检查图的边方向:水文网络是有向图,确保边的
from和to符合水流方向(比如上游到下游),避免因方向搞反导致路径不通。
内容的提问来源于stack exchange,提问作者jhollist
相关产品推荐
相关产品推荐

