邻居在R中的igraph包中起作用

时间:2015-03-17 09:57:52

标签: r graph igraph neighbours

首先,我想说我已经阅读了问题的答案:“问题与R”igraph“包邻居功能”,我试图解决我的问题,但我不能。我试图将我的问题作为后续评论,但由于声誉水平低我无法做到,因此我打开了这个新问题。现在这是我的问题: 我对邻居函数有同样的问题,因为它已在下面解释: "igraph” package neighbor function但是当我尝试由Gabor Csardi给出的解决方案时,我刚收到null作为结果。我也在这里附上了我的代码部分。我会非常感谢任何帮助和回答。 我的桌子:

edgelist <- read.table(text = "
1 2
2 3
3 4
4 5
3 6
6 7")
library(igraph)
graph <- graph.data.frame(edgelist)

str(graph)
## IGRAPH DN-- 7 6 -- 
## + attr: name (v/c)
## + edges (vertex names):
## [1] 1->2 2->3 3->4 4->5 3->6 6->7

现在,如果我想要节点3的邻居,那么它应该是

2, 4, 6

但我得到的结果是:

2, 4, 5

我注意到它改变了我的节点的顺序。正如我之前解释的那样,我尝试了在堆栈溢出中找到的解决方案,但结果是null:

graph$name[neighbors(graph, 3)]
   NULL

我不知道我还能做什么, 我将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:7)

在开始之前,您应该小心不要混淆标签/名称和给定顶点的索引/编号。当你使用这两个数字作为标签和指标时,事情很快就会变得混乱。为了避免混淆,我在这里使用了字母

edgelist <- read.table(text = "
A B
B C
C D
D E
C F
F G")  

library(igraph)
graph <- graph.data.frame(edgelist)
str(graph)
#IGRAPH DN-- 7 6 -- 
# + attr: name (v/c)
# + edges (vertex names):
# [1] A->B B->C C->D D->E C->F F->G

要了解处理的内容,我们将其绘制出来:

plot(graph)

Imgur

要获得邻居的索引,请执行以下操作: (记住有一个mode参数)

neighbors(graph, 3, mode = "total")  # Index of neighbours by index
## [1] 2 4 5
neighbors(graph, "C", mode = "total")  # Index of neighbours by label
## [1] 2 4 5

要做Gabor建议你需要做的事情。 (我认为他错过V( )并写了graph$name,当他在帖子中提到V(graph)$name

# Label of neighbours by label
V(graph)$name[neighbors(graph, "C", mode = "total")]
## [1] "B" "D" "F"

这给出了相应的&#34;邻居&#34;的标签。 这与图像一致。

编辑糟糕。我搞砸了。使用E()代替V()。它似乎按预期工作。遗憾。

答案 1 :(得分:0)

或者,您可以使用哪个来为您提供所需的索引:

neighbors(g,which(V(g)$name %in% 'A'),mode='in')