提取元素名称相似的嵌套列表元素

时间:2012-10-02 12:14:55

标签: r list

我有一个嵌套的监听,由一个函数产生。顶部元素名称在元素名称中进一步缩小。

$`1`
$`1`$`1`
[1] 0 0 0 0 0 0 0 1 0

$`1`$`2`
[1] 0 0 0 0 0 0 0 0 0

$`2`
$`2`$`1`
[1] 0 0 0 1 1 0 0 0 0

$`2`$`2`
[1] 0 1 0 0 0 1 0 0 0

是否有办法使用apply函数(或其他)来提取元素和子元素名称匹配的向量。例如。 $ 1 $ 1和$ 2 $ 2。我有一个巨大的列表(4000个元素和4000个子元素)因此效率是必须的。

或者 - 我已经通过使用'melt()'找到了解决这个问题的方法,但是对于我的设置大小来说太过消耗了。但是,如果有人知道如何复制效果 - 为elementname提供一个包含3列的数据帧,一个用于子元素名称,另一个用于向量 - 这也将起作用。

问候并感谢:)

2 个答案:

答案 0 :(得分:4)

这是一种获取所需矢量列表的方法:

lapply(names(dat), function(x) dat[[x]][[x]])

在数据框中:

do.call("rbind",
        lapply(names(dat),
               function(x) data.frame(element = x,
                                      subelement = x,
                                      values = dat[[x]][[x]])
        )
)

答案 1 :(得分:2)

您可以在没有递归的情况下unlist删除顶级列表结构,然后对此结果的名称使用正则表达式辅助子集。

l <- list(`1`=list(`1`=rpois(6,1),`2`=rep(0,6)),`2`=list(`1`=rep(0,6),`2`=rpois(6,1)))
l2 <- unlist(l,recursive=F)
l2[grepl("([0-9]+)[.]\\1",names(l2))]
$`1.1`
[1] 2 0 2 4 1 0

$`2.2`
[1] 0 0 0 2 1 0