3

我有一个嵌套列表,由一个函数产生。顶部元素名称在更下方的元素名称中重复出现。

$`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

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

或者 - 我已经找到了使用“melt()”来摆脱这种混乱的方法,但是对于我的集合大小来说它太消耗了。但是,如果有人知道如何复制效果——给出一个包含 3 列的数据框,一列用于元素名称,一列用于子元素名称,一列用于向量——这也可以。

问候和感谢:)

4

2 回答 2

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]])
        )
)
于 2012-10-02T12:22:15.183 回答
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
于 2012-10-02T13:11:13.167 回答