在多维列表中选择通配符?

时间:2012-02-24 14:59:52

标签: r list multidimensional-array

在R中,我有一个多维列表。我可以访问以下元素:

results[["A1"]][["B2"]][["C1"]]

当然,上述声明的输出也是一个列表。

我想做的是:

results[["A1"]][[*]][["C1"]]

results[["A1"]][[,]][["C1"]]

我想要的输出是一个大的列表,它是第二维中每个值(例如“B1”,“B2”,......)列表的串联。

这样的事情可能吗?我知道我可以迭代所需的维度:

for (i in 1:length(results[["A1"]])){
    output = c(output, results[["A1"]][[i]][["C1"]]
}

但我想知道是否有更干净的东西?我做错了吗?

1 个答案:

答案 0 :(得分:1)

这有用吗?

sapply( sapply(results[["A1]], "[[", TRUE), "[[", "C1"")

对特定索引名称“D”的第四级概括只是:

sapply( sapply( sapply(results[["A1"]], "[[", TRUE), "[[", "C1"), "[[", "D")

从内到外阅读,就像需要对嵌套函数调用一样,收集results$A1值的所有子列表,然后进行处理以构建仅包含“C1”名称的列表,然后进一步提取减少的列表以产生形式results$A1$all-wildcards$C1$D的值。鉴于“[[”函数将评估其参数的事实,如果它们是适当的索引级别的有效列表名称,则可以提供具有多个值的不带引号的对象。