R中igraph包中的邻居函数

flvtvl50  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(138)

首先,我想说我已经读过这个问题的答案了:“issues with R“igraph”package neighbor function”,我试图解决我的问题,但我做不到。我试图提出我的问题作为后续评论,但由于声誉水平低,我做不到,因此我打开了这个新问题。现在我的问题是:我有同样的问题与邻居的职能,因为它已经解释:"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

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

ncgqoxb0

ncgqoxb01#

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

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(graph)$name,但他漏掉了V( ),写的是graph$name)。

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

这就给出了相应“邻居”的标签。这确实与图像一致。

编辑哎呀。我搞砸了。用E()代替V()。看起来像预期的那样工作。抱歉。
EDIT 2要查看邻居图(导出子图),您可以执行以下操作:

n <- neighbors(graph, "C", mode = "total")

subgraph <- induced.subgraph(graph, n)
plot(subgraph)

在这种情况下,这是一个相当无聊的子图,你可能也想把这个顶点包括进去:

subgraph2 <- induced.subgraph(graph, c(n, V(graph)["C"]))
plot(subgraph2)

t40tm48m

t40tm48m2#

或者,您可以使用which来给予所需的索引:

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

相关问题