2012-05-24 1 views
1

Я нашел следующий вопрос (Find distance of route from get.shortest.paths()) очень полезным, но хотел бы сделать это еще на один шаг. Я добавил один столбец в фрейм данных, и я хотел бы получить «общее расстояние», связанное с минимальным контуром newcost.Найти вторую переменную, связанную с расстоянием маршрута от get.shortest.paths()

Подпись igraph/R, которую я использовал.

df2 = rbind(c(234,235,21.6,75), 
c(234,326,11.0,35), 
c(235,241,14.5,78), 
c(326,241,8.2,98), 
c(241,245,15.3,75), 
c(234,245,38.46,65)) 

df2 = as.data.frame(df2) 
names(df2) = c("start_id","end_id","newcost","distance") 

df2 

require(igraph) 
g2 <- graph.data.frame(df2, directed=FALSE) 

tkplot(g2) 

(tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost)) 

# This gives the shortest path based on $newcost 
V(g2)[tmp2[[1]]] 

Вопрос, на который я хотел бы ответить, - это расстояние, связанное с этим самым коротким путем. Ответ кратчайшего пути 34,5 и (вычисляется вручную) расстояние, связанное с этим путем, равно 208.

Оцените некоторые подсказки о том, как получить это расстояние автоматически.

Спасибо! Jochem

# What is the distance related to the min newcost? 

ответ

1

Это дает края вдоль вашему оптимальному путь:

optimal.path <- V(g2)[tmp2[[1]]] 
E(g2, path = optimal.path) 
# Edge sequence: 
#    
# [1] 326 -- 234 
# [3] 241 -- 326 
# [4] 245 -- 241 

(обратите внимание, что они не появляются в порядке, по вашему оптимальному пути, но, как они появляются в определении вашего графика . g2)

и это дает вам общее расстояние:

sum(E(g2, path = optimal.path)$distance) 
# [1] 208