【问题标题】:Select wildcard in multidimensional list?在多维列表中选择通配符?
【发布时间】:2012-03-15 00:40:30
【问题描述】:

在 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"]]
}

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

【问题讨论】:

  • 由于我面前没有样本数据,我无法确定您以什么开头或以什么结尾……但请查看lapply 和@ 987654326@ 和recursive=FALSE。这两个应该可以满足您的需求。
  • 我不知道您是否仍希望它们在列表中,但使用 do.call("rbind",list) 将它们转换为数据框,然后对组进行子集化要容易得多。
  • @Justin:是的,这对我有用。谢谢!我最终使用了类似unlist(lapply(results[["A1"]], FUN=function(x){x[["C1"]]}), recursive=F)

标签: r list multidimensional-array


【解决方案1】:

这行得通吗?

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

将特定索引名称“D”推广到第四级将是:

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

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

【讨论】:

  • 这几乎可以工作。在我的真实数据集中,我实际上在通配符维度之后有两个维度,即 [["C1"]][["D1"]]。语法如何查找?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多