R" igraph"的问题包邻居功能

时间:2014-11-14 14:38:01

标签: r graph igraph

我最近开始使用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。 感谢帮助。

2 个答案:

答案 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不需要这样做。