提取节点集合的邻居名称作为列表

时间:2020-09-17 22:06:35

标签: r igraph

我想提取igraph中选定节点的邻居名称作为列表。

这是我到目前为止所拥有的:

library(igraph)
set.seed(100)
g<-erdos.renyi.game(26, 0.4)
V(g)$name<-letters
x<-neighborhood(g, order = 1, V(g)$name %in% c('a', 'd', 'z'))

在上面的示例中,我想提取节点a,d, and z的邻居的名称。这是我得到的输出:

[[1]]
+ 9/26 vertices, named, from 6ba7060:
[1] a c h i l q w x z

[[2]]
+ 11/26 vertices, named, from 6ba7060:
 [1] d b c e g h i k l w y

[[3]]
+ 9/26 vertices, named, from 6ba7060:
[1] z a c g h l o u v

我想列出一长串带有表示形式的名称。输出应如下所示:

[1] "a" "c" "h" "i" "l" "q" "w" "x" "z" "d" "b" "c" "e" "g" "h" "i" "k" "l" "w" "y" "z" "a" "c"
[24] "g" "h" "l" "o" "u" "v

到目前为止,我已经使用unlist库尝试了x %>% map(2) %>% flatten()purrr的各种版本,但无济于事。

我也不反对以data.frametibble的形式获得输出,其中一列中包含名称,而另一列中出现的次数。

3 个答案:

答案 0 :(得分:2)

您可以将names()应用于列表中的每个元素以获取顶点名称作为字符值,然后可以unlist将这些列表合并为单个字符向量

unlist(lapply(x, names))

答案 1 :(得分:2)

也许您可以尝试names(unlist(x)),例如

> names(unlist(x))
 [1] "a" "c" "h" "i" "l" "q" "w" "x" "z" "d" "b" "c" "e" "g" "h" "i" "k" "l" "w"
[20] "y" "z" "a" "c" "g" "h" "l" "o" "u" "v"

答案 2 :(得分:1)

如果您希望包含计数的数据框,则可以执行以下操作:

stack(table(unlist(lapply(x, names))))[2:1]
#>    ind values
#> 1    a      2
#> 2    b      1
#> 3    c      3
#> 4    d      1
#> 5    e      1
#> 6    g      2
#> 7    h      3
#> 8    i      2
#> 9    k      1
#> 10   l      3
#> 11   o      1
#> 12   q      1
#> 13   u      1
#> 14   v      1
#> 15   w      2
#> 16   x      1
#> 17   y      1
#> 18   z      2