在R中读取一个有向图

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个回答

6

这对我来说似乎很正常:

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

请注意,R会更改节点并将它们从零开始索引(如下@Sacha Epskamp在最近的igraph更新中评论)。 使用方法:

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

您将看到您想要的名称,即1和2之间的边缘。

绘制最短路径的一种方法是使用get.all.shortest.paths,然后使用它来对子图进行子集化并覆盖绘制。请参见我在此问题的答案中类似的示例,其中我绘制了一棵生成树。


请注意,R更改了节点并从零开始对它们进行索引。这在最近的igraph更新中已经被更改。 - Sacha Epskamp

5
错误的原因是边列表文件(即格式为“edgelist”)将顶点编号从零开始。即使最近的R igraph包将顶点编号从1开始,这在所有igraph版本中都是相同的。
这是因为我们希望R igraph在文件格式方面与Python igraph和C igraph保持一致。即Python igraph编写的文件(在本例中为边列表文件)由R igraph和Python igraph以相同的方式解释。基于零的编号是文件格式的属性。
如果您已经有一个从1开始编号顶点的边列表文件,则不是igraph edgelist文件格式,并且需要通过从每个顶点ID中减去1来进行转换。
一种解决方法是使用scan()或read.table()读取文件(如果您有大文件,则scan()速度更快),然后直接调用graph()。在这种情况下,您无需减去1,因为在R igraph中,顶点ID从1开始编号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接