我想提取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.frame
或tibble
的形式获得输出,其中一列中包含名称,而另一列中出现的次数。
答案 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