我最近开始使用R“igraph”包(版本0.7)。我写了一个简单的程序来理解包的基础知识(将数据读入图形对象,获取节点的邻居)。我正在使用顶点从0开始的图形。图中的边缘是根据我的需要填充的,但是当我尝试获取节点的邻接列表/邻居时,我发现它没有给出我期望的结果。有人可以帮我解决这个问题,或者指出我是否遗漏了一些微不足道的东西?
下面是我写的图表数据/代码:
图形边缘数据(第一列包含第一个顶点,第二列包含与第一个顶点有边缘的顶点)
0 5
1 5
2 5
3 5
0 2
> library('igraph')
> graph_file_ori = read.table("test.txt")
> graph_obj = graph.data.frame(graph_file_ori,directed=FALSE)
> str(graph_obj)
IGRAPH UN-- 5 5 --
+ attr: name (v/c)
+ edges (vertex names):
[1] 0--5 1--5 2--5 3--5 0--2
> neighbors(graph_obj,0)
Error in .Call("R_igraph_neighbors", graph, as.igraph.vs(graph, v) - 1, :
At type_indexededgelist.c:750 : cannot get neighbors, Invalid vertex id
> neighbors(graph_obj,1)
[1] 3 5
> neighbors(graph_obj,2)
[1] 5
> neighbors(graph_obj,3)
[1] 1 5
> neighbors(graph_obj,4)
[1] 5
> neighbors(graph_obj,5)
[1] 1 2 3 4
根据图表,预期输出为:
neighbors(0) = 5,2
neighbors(1) = 5
neighbors(2) = 5,0
neighbors(3) = 5
4度为0。 感谢帮助。
答案 0 :(得分:0)
您的图表有: 顶点1:“0”,顶点2:“1”,顶点3:“2”,顶点4:“3”,顶点5:“5”
以下是我认为neighbors()的工作原理:
邻居(graph_obj,1)< =>邻居(graph_obj,vertex 1)并返回顶点3,顶点5< => “2”,“5”
邻居(graph_obj,2)< =>邻居(graph_obj,vertex 2)并返回顶点5< => “5”
邻居(graph_obj,3)< =>邻居(graph_obj,vertex 3)并返回顶点1,顶点5< => “0”,“5”
...
答案 1 :(得分:0)
如果你想使用符号顶点名称,那很好,但是你也需要在你的查询中使用它们。即写
neighbors(graph_obj, "0")
如果您想将结果作为符号名称,则需要执行
graph_obj$name[neighbors(graph_obj, "0")]
igraph版本0.8不需要这样做。