将路径作为顶点序列。如果你有一系列的边,这将很容易-只需为每条边加上权重。因此,您需要做的是将顶点序列转换为边序列。这就是
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)
好,现在假设我们要沿着节点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
添加内容:
在添加到问题的数据中,有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))])