在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"]]
}
但我想知道是否有更干净的东西?我做错了吗?
答案 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
的值。鉴于“[[”函数将评估其参数的事实,如果它们是适当的索引级别的有效列表名称,则可以提供具有多个值的不带引号的对象。