如何将igraph ego()列表转换为有意义的数据帧?

如何将igraph ego()列表转换为有意义的数据帧?,r,igraph,R,Igraph,我拥有以下网络: edges <- data.frame(from=c('a','1','2','b'), to=c('1','2','3','4')) edges from to 1 a 1 2 1 2 3 2 3 4 b 4 理想情况下,我只需要 3 2 1 a 4 b NA NA 因为我只对从“a”到“3”以及从“4”到“b”的完整路径感兴趣 使用igraph包中的ego()函数,我得到了一个包含此信息的列表,但我还没有将其转换为上述形式的

我拥有以下网络:

edges <- data.frame(from=c('a','1','2','b'), to=c('1','2','3','4'))
edges
   from to
1    a  1
2    1  2
3    2  3
4    b  4
理想情况下,我只需要

3 2 1  a
4 b NA NA
因为我只对从“a”到“3”以及从“4”到“b”的完整路径感兴趣

使用igraph包中的ego()函数,我得到了一个包含此信息的列表,但我还没有将其转换为上述形式的数据帧:

test <- ego(graph,4,edges[,2], "in")
test
[[1]]
+ 1/6 vertex, named:
[1] a

[[2]]
+ 2/6 vertices, named:
[1] 1 a

[[3]]
+ 3/6 vertices, named:
[1] 2 1 a

[[4]]
+ 1/6 vertex, named:
[1] b 

好的,我已经找到了一种方法,但我不确定这是否是最有效的

neighbors <- lapply(1:length(test), function(x) names(test[[x]]))
require(plyr)
data.frame(edges$to,ldply(neighbors, rbind))
  edges.to X1   X2   X3
1        1  a <NA> <NA>
2        2  1    a <NA>
3        3  2    1    a
4        4  b <NA> <NA>

邻居我们也可以使用
rbind.fill

library(plyr)
rbind.fill(lapply(test, function(x)as.data.frame(t(names(x)))))
#  V1   V2   V3
#1  a <NA> <NA>
#2  1    a <NA>
#3  2    1    a
#4  b <NA> <NA>
库(plyr)
rbind.fill(lappy(测试,函数(x)作为.data.frame(t(名称(x '))))
#V1 V2 V3
#1A
#21 a
#3 2 1 a
#4 b
neighbors <- lapply(1:length(test), function(x) names(test[[x]]))
require(plyr)
data.frame(edges$to,ldply(neighbors, rbind))
  edges.to X1   X2   X3
1        1  a <NA> <NA>
2        2  1    a <NA>
3        3  2    1    a
4        4  b <NA> <NA>
library(plyr)
rbind.fill(lapply(test, function(x)as.data.frame(t(names(x)))))
#  V1   V2   V3
#1  a <NA> <NA>
#2  1    a <NA>
#3  2    1    a
#4  b <NA> <NA>