R中igraph包中的邻居函数
neighbors function in igraph package in R
首先,我想说的是,我已经阅读了问题的答案:"issues with R “igraph” package neighbor function",并且我试图解决我的问题,但我做不到。我试图提出我的问题作为后续评论,但由于声誉低下我不能,因此我打开了这个新问题。现在这是我的问题:
我对 neighbors 功能有同样的问题,因为它已在以下内容中解释过:
"igraph” package neighbor function but when I try the solution which is given by Gabor Csardi 我刚刚收到 null 作为结果。我也在这里附上了我的那部分代码。我将非常感谢任何帮助和回答。
我的 table:
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
我注意到它改变了我节点的顺序。正如我之前解释的那样,我尝试了在堆栈溢出中找到的解决方案,但结果为空:
graph$name[neighbors(graph, 3)]
NULL
我不知道我还能做什么,
如果有任何帮助,我将不胜感激。
在我们开始之前,您应该注意不要混淆给定顶点的 label/name 和 index/number。当您同时使用数字作为标签和标记时,事情很快就会变得混乱。为了避免混淆,我在这里使用字母
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)
要获取邻居的索引,请执行以下操作:
(记住有一个 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( )
并在 post 中表示 V(graph)$name
时写了 graph$name
)
# Label of neighbours by label
V(graph)$name[neighbors(graph, "C", mode = "total")]
## [1] "B" "D" "F"
这给出了相应"neighbors"的标签。
这与图像一致。
编辑 糟糕。我搞砸了。使用 E()
而不是 V()
。它似乎按预期工作。对不起。
或者,您可以使用 which 为您提供所需的索引:
neighbors(g,which(V(g)$name %in% 'A'),mode='in')
首先,我想说的是,我已经阅读了问题的答案:"issues with R “igraph” package neighbor function",并且我试图解决我的问题,但我做不到。我试图提出我的问题作为后续评论,但由于声誉低下我不能,因此我打开了这个新问题。现在这是我的问题: 我对 neighbors 功能有同样的问题,因为它已在以下内容中解释过: "igraph” package neighbor function but when I try the solution which is given by Gabor Csardi 我刚刚收到 null 作为结果。我也在这里附上了我的那部分代码。我将非常感谢任何帮助和回答。 我的 table:
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
我注意到它改变了我节点的顺序。正如我之前解释的那样,我尝试了在堆栈溢出中找到的解决方案,但结果为空:
graph$name[neighbors(graph, 3)]
NULL
我不知道我还能做什么, 如果有任何帮助,我将不胜感激。
在我们开始之前,您应该注意不要混淆给定顶点的 label/name 和 index/number。当您同时使用数字作为标签和标记时,事情很快就会变得混乱。为了避免混淆,我在这里使用字母
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)
要获取邻居的索引,请执行以下操作:
(记住有一个 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( )
并在 post 中表示 V(graph)$name
时写了 graph$name
)
# Label of neighbours by label
V(graph)$name[neighbors(graph, "C", mode = "total")]
## [1] "B" "D" "F"
这给出了相应"neighbors"的标签。 这与图像一致。
编辑 糟糕。我搞砸了。使用 E()
而不是 V()
。它似乎按预期工作。对不起。
或者,您可以使用 which 为您提供所需的索引:
neighbors(g,which(V(g)$name %in% 'A'),mode='in')