igraph包在R语言中的neighbors函数

4
首先我想说,我已经阅读了关于“igraph”包邻居函数的问题的答案,并尝试解决我的问题,但是我没有成功。我试图在后续评论中提出我的问题,但由于声誉较低,我无法这样做,因此我开了这个新问题。现在我的问题如下: 我遇到了与邻居函数相同的问题,就像这篇文章中所解释的那样:"igraph” package neighbor function,但是当我尝试使用Gabor Csardi提供的解决方案时,我只收到了空值作为结果。我也在这里附上了我的代码的一部分。非常感谢任何帮助和答案。 我的表格:
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

我注意到它改变了我的节点顺序。正如我之前解释的那样,我尝试了在stackoverflow上找到的解决方案,但结果为null:

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

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

2个回答

9

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

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"

这提供了相应“邻居”的标签。这与图像一致。

编辑 哎呀,我搞砸了。使用了E()而不是V()。它似乎按预期工作。抱歉。

编辑2 要查看邻居(诱导子图)的绘图,您可以执行以下操作:

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

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

subgraph

在这种情况下,子图相当无聊。您可能还想包括相关的顶点:
subgraph2 <- induced.subgraph(graph, c(n, V(graph)["C"]))
plot(subgraph2)

subgraph 2


@Anders:非常好的回答!你如何将“file = neighbors(graph, 3, mode = "total")”转换为igraph对象? - stats_noob
假设我想绘制:plot(neighbors(graph, 3, mode = "total")) .... 这可行吗? - stats_noob
@stats_noob 在这种情况下,你会期望什么?我猜你要么想要子图的1)仅包括邻居或者2)包括邻居和相关顶点。我已经编辑了答案来展示两种情况。 - Anders Ellern Bilgrau

0

或者,你可以使用 which 函数来获取你想要的索引:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接