在R语言中使用iGraph获取指定路径权重的方法
获取igraph路径总成本的方法
当然有对应的函数可以直接搞定这个需求,不用手动累加!在igraph里,你可以用path_length()函数,专门用来计算路径的总权重(也就是你的cost总和),关键是要指定权重参数对应你的边属性。
举个具体的例子:
假设你的有向图对象叫my_graph,从all_shortest_paths得到的单条路径是target_path(vpath格式,也就是顶点的序列),那直接运行下面的代码就能得到总成本:
path_length(my_graph, target_path, weights = E(my_graph)$cost)
如果all_shortest_paths返回了多条最短路径(存在多个等价最短路径的情况),你可以用sapply()批量计算每条路径的总成本:
shortest_paths_result <- all_shortest_paths(my_graph, from = "起点顶点", to = "终点顶点") all_costs <- sapply(shortest_paths_result$res, function(p) path_length(my_graph, p, weights = E(my_graph)$cost))
简单解释下:path_length()会自动根据vpath里的顶点序列,找到相邻顶点之间的边,然后把这些边的cost属性值累加起来,完全符合你的需求。
如果你想手动验证的话,也可以把路径转成边序列再求和,比如:
edge_seq <- E(my_graph, path = target_path) sum(edge_seq$cost)
不过显然用内置的path_length()更简洁高效。
内容的提问来源于stack exchange,提问作者Carrol
相关产品推荐
相关产品推荐

