2012-02-16 13 views
4

Rでigraphパッケージを使用しています。私のネットワーク内の2つのノード間の最短距離を計算します。 get.shortest.paths()で計算されたパスの距離を抽出する簡単な方法はありますか?ここでget.shortest.paths()からの距離を見つける

私の問題を例示しているいくつかの再現性のあるコードです:

## reproducible code: 
df2 = rbind(c(234,235,21.6), 
c(234,326,11.0), 
c(235,241,14.5), 
c(326,241,8.2), 
c(241,245,15.3), 
c(234,245,38.46)) 

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

require(igraph) 

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

class(g2) 

print(g2, e=TRUE, v=TRUE) 

## calculate shortest path between vertex 234 and 245 
(tmp2 = get.shortest.paths(g2, from='234', to='245',weights=E(g2)$newcost)) 

## print route vertices: 
V(g2)[tmp2[[1]]] 

## print distance of each route segment: 
## ?? 

## calculate distance using 'newcost' weights: 
## ?? sum(route segments) ?? 

答えて

6

あなたはshortest.paths機能を使用することができ、 例えば:

# compute the min distances from '234' to all other vertices 
tmp3 <- shortest.paths(g2,v='234',weights=E(g2)$newcost) 

# print min distance from '234' to '245' 
tmp3[1, which(V(g2)$name == '245')] 

アルゴリズムによって計算された距離は34.5 = 11 + 8.2 + 15.3ある、など次の図に示すように、

enter image description here

+0

ありがとう!対応策が正しくないことを反映するようにコードを更新しました。ところで - どのようにネットワークをプロットしましたか? –

+0

@ baha-kev:実際には、 'tkplot(グラフ)'を使ってグラフをプロットしてから、頂点の名前とエッジの重みを手動で追加しました;) – digEmAll

+0

非常にクールです;おかげで - –

関連する問題