Mel*_*Mel 4 r directed-graph igraph
我有一个根据数据框以from, to, cost列的形式创建的图表。我还有一条有效的路径(作为一系列顶点,格式为vpath) (我的图是有向的)。igraph
给定我的图表和路径,是否有任何函数可以给出该路径的成本?
我不是要求最短路径,因为我从 获得了路径all_shortest_paths。但是,我只获得了节点连续性,而不是我也需要的路径权重。
编辑:数据
这是我的数据框,我将其转换为图表:http://www.sharecsv.com/s/47209742f0052a37e17db37ea3af63ac/arcsWithCost.csv
而我的道路是15 4 50 212 183 112 114 37 228 119
您的路径是一系列顶点。如果您有边的序列,这将很容易 - 只需将每条边的权重相加即可。因此,您需要做的是将顶点序列转换为边序列。就是这样get.edge.ids,尽管您需要将数据转换为正确的格式。
由于您没有提供任何数据,我将随机举例说明。
library(igraph)
set.seed(1234)
g = erdos.renyi.game(10,0.15, directed=TRUE)
E(g)$weight = sample(5, length(E(g)), replace=TRUE)
plot(g)
Run Code Online (Sandbox Code Playgroud)
好的,现在假设我们想要对从节点 1-4-10-3 开始的路径上的权重求和。我假设你有一个清单 c(1,4,10,3)
VP = c(1,4,10,3)
EP = rep(VP, each=2)[-1]
EP = EP[-length(EP)]
E(g)$weight[get.edge.ids(g, EP)]
[1] 1 5 4
sum(E(g)$weight[get.edge.ids(g, EP)])
[1] 10
Run Code Online (Sandbox Code Playgroud)
在添加到问题的数据中,有 110 个节点,但编号最多为 281。这些数字是节点的标签,而不是节点 ID。您可以使用标签来访问节点,但必须将它们转换为字符串才能将它们视为标签。这段代码适用于您的示例。
VP = c(15, 4, 50, 212, 183, 112, 114, 37, 228, 119)
EP = rep(VP, each=2)[-1]
EP = EP[-length(EP)]
E(g)$cost[get.edge.ids(g, as.character(EP))]
sum(E(g)$cost[get.edge.ids(g, as.character(EP))])
Run Code Online (Sandbox Code Playgroud)