[英]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的图表:
如您所见,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.