2012-11-28 3 views
5

유향 그래프 읽기/작성에 어려움이 있습니다. 나는 내가 찾은 조치를 따랐다. here.R 방향 그래프 읽기

이 내 텍스트 파일 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에 EAD : 등등

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

당신>이 1 사이에 에지가없는 볼 수 있듯이,> 3 1, 5> 10을. 유향 그래프를 올바르게 읽으려면 어떻게해야합니까?

이 작업을 수행 한 후에 두 노드 사이의 최단 경로를 모두 표시하려면 어떻게해야합니까?

답변

6

이 나를 위해 잘 작동하는 것 같다 :

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

R 그들 (하지 아래 @Sacha Epskamp의 주석으로 가장 최근의 igraph 갱신)에 위쪽으로 0에서 노드와 인덱스를 변경합니다. 사용 :

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

당신은 당신이 원하는 이름을 볼 수 있습니다. 즉 1과 2 사이의 모서리.

가장 짧은 경로를 플롯하는 한 가지 방법은 get.all.shortest.paths을 사용하는 것이며이 방법을 사용하여 그래프를 부분 집합 화하고이를 오버플로합니다. 스패닝 트리를 플로팅하는 유사한 예제는 내 answer to this question을 참조하십시오.

+0

"Note R은 노드를 변경하고 노드를 0부터 위로 인덱싱합니다."최근의 igraph 업데이트에서이 노드가 변경되었습니다. –

+0

@SachaEpskamp cool 나는 그것을 몰랐다. –

5

오류의 원인은 가장자리 목록 파일 (즉, 형식 "edgelist")이 0부터 정점에 번호를 부여하기 때문입니다. 최근 igraph 패키지가 꼭지점 수를 하나 지정해도 모든 igraph 버전에서 동일합니다.

이유는 파일 형식이 간다면 R igraph가 Python igraph 및 C igraph와 일관성있게되기를 바랍니다. 나는. Python igraph가 작성한 파일 (이 경우 가장자리 목록 파일)은 R igraph와 Python igraph에서 같은 방식으로 해석됩니다. 0부터 시작하는 번호 매기기는 파일 형식의 속성입니다.

igraph edgelist 파일 형식이 아닌 정점에 번호 매기기를 시작하는 가장자리 목록 파일이 이미있는 경우 각 정점 id에서 하나를 빼기 만하면 변환해야합니다.

해결 방법은 (scan()이 훨씬 더 빨리, 당신은 큰 파일이있는 경우 중요 할 수 있음) scan() 또는 read.table()와 파일에 읽은 다음 직접 graph()를 호출하는 것입니다. 이 경우에는 igraph에서 꼭지점 ID가 하나에서부터 번호가 매겨지기 때문에 하나를 뺄 필요가 없습니다.

관련 문제