繁体   English   中英

阅读R中的有向图

[英]Read a directed graph in 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的图表:

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

如您所见,1-> 2,1-> 3,5-> 10之间没有边缘,依此类推。 如何正确阅读有向图?

完成此操作后,如何显示两个节点之间的所有最短路径?

这对我来说似乎很好:

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

注意R更改节点并将它们从零向上编入索引(不是在最近的igraph更新中,如下面的@Sacha Epskamp评论)。 使用:

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

你会看到你想要的名字。 即1到2之间的边缘。

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

出错的原因是边列表文件(即格式"edgelist" )将顶点从零开始编号。 这在所有igraph版本中都是相同的,即使最近的R igraph包从一个顶点编号。

原因是我们希望R igraph与Python igraph和C igraph一致,就文件格式而言。 即由igraph和Python igraph以相同的方式解释由Python绘制的文件(在本例中为边缘列表文件)。 从零开始的编号是文件格式的属性。

如果你已经有一个边缘列表文件,它开始用一个顶点编号,那不是edgelist边缘列表文件格式,你需要转换它,只需从每个顶点id中减去一个。

解决方法是使用scan()read.table()读取文件( scan()要快得多,如果你有大文件可能很重要),然后直接调用graph() 在这种情况下,您不需要减去一个,因为在R igraph中,顶点ID从一个编号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM