5

有向グラフの読み取り/作成に問題があります。ここで見つけた手順に従いました。

これは私のテキストファイルgraph.txtです:

1 2
1 3
2 5
3 4
3 5
4 5
5 6
5 10
6 7
7 8
7 9
7 12
8 9
9 10
9 11
9 12
10 11
11 7
11 12

今、私はこのgraph.txtを読みました:

library("igraph")
xlist<-read.graph("graph.txt", format="edgelist")

そして、私はそれをプロットします:

plot(xlist)

しかし、それは私が xlist に読み込んだグラフではありません:

http://i.imgur.com/dubQh.png

ご覧のとおり、1->2、1->3、5->10 などの間にエッジはありません。有向グラフを正しく読み取るにはどうすればよいですか?

これを行った後、どうすれば 2 つのノード間のすべての最短経路を表示できますか?

4

2 に答える 2

6

これは私にとってはうまくいくようです:

 xlist<-read.table("graph.txt")
 xlist <- graph.data.frame(xlist)
 plot(xlist)

ノードを変更し、それらをゼロから上にインデックス付けすることに注意してください( @Sacha Epskampが以下にコメントしているようRに、最新の更新ではありません)。igraph使用:

plot(xlist, vertex.label= V(xlist)$name)

必要な名前が表示されます。つまり、1 と 2 の間のエッジです。

最短経路をプロットする 1 つの方法はget.all.shortest.paths、使用してから、これを使用してグラフをサブセット化し、それを重ねてプロットすることです。スパニングツリーをプロットする同様の例については、この質問に対する私の回答を参照してください。

于 2012-11-28T13:04:53.323 に答える
5

エラーの理由は、エッジ リスト ファイル (つまり、 format "edgelist") が頂点に 0 から番号を付けていることです。これは、最近の R igraph パ​​ッケージが頂点を 1 から数えている場合でも、すべての igraph バージョンで同じです。

その理由は、ファイル形式に関する限り、R igraph を Python igraph および C igraph と一致させたいからです。つまり、Python igraph によって記述されたファイル (この場合はエッジ リスト ファイル) は、R igraph と Python igraph によって同じように解釈されます。ゼロベースの番号付けは、ファイル形式のプロパティです。

頂点の番号付けを 1 で開始するエッジ リスト ファイルが既にある場合、それは igraphedgelistファイル形式ではなく、各頂点 ID から 1 を差し引くだけで変換する必要があります。

回避策として、scan()or read.table()(scan()の方がはるかに高速で、大きなファイルがある場合は重要です) を使用してファイルを読み込み、graph()直接呼び出します。この場合、R igraph では頂点 ID が 1 から数えられるため、1 を引く必要はありません。

于 2012-11-29T00:20:32.640 に答える