2013-04-10 2 views
2

Мне нужно вычислить произведение атрибутов краев кратчайшего пути между двумя вершинами на моем графике.Как получить список атрибутов края при выполнении shortest.paths в igraph (R)

Например:

data<-as.data.frame(cbind(c(1,2,3,4,5,1),c(4,3,4,5,6,5),c(0.2,0.1,0.5,0.7,0.8,0.2))) 
G<-graph.data.frame(data, directed=FALSE) 
set.edge.attribute(G, "V3", index=E(G), data$V3) 

Если рассчитать кратчайший путь в соответствии с атрибутом У меня есть два максимальных возможностей, первый сказать мне шаги:

get.shortest.paths (G, 2, 6, weights=E(G)$V3) 

Вторая подскажите мне сумму атрибута вдоль пути.

shortest.paths (G, 2, 6, weights=E(G)$V3) 

1,8

Поскольку мне нужно сделать продукт, я должен был бы иметь вектор края атрибутов между узлами моего пути. В этом примере я должен получить 0,8 0,2 0,2 ​​0,5 0,1, продукт которого составит 0,0016. Может ли кто-нибудь предложить мне, как это сделать?

ответ

4

Используйте output аргумент get.shortest.paths:

library(igraph) 
data <- data.frame(from =c(1, 2, 3, 4, 5, 1), 
        to =c(4, 3, 4, 5, 6, 5), 
        weight=c(0.2,0.1,0.5,0.7,0.8,0.2)) 
G <- graph.data.frame(data, directed=FALSE) 

esp26 <- get.shortest.paths(G, 2, 6, output="epath")[[1]] 
esp26 
# [1] 2 3 1 6 5 

prod(E(G)$weight[esp26]) 
# [1] 0.0016 

plot(G, edge.label=paste("Id:", 1:ecount(G), "\n", "W:", 
      E(G)$weight, sep="")) 

plot