【问题标题】:How to select all elements of a list at a particular nested Level?如何在特定嵌套级别选择列表的所有元素?
【发布时间】:2012-11-07 06:36:50
【问题描述】:

或者换一种说法:如何在嵌套列表中使用[[ 运算符?

当我询问如何确定列表的深度级别时,您可以将此视为one 的后续问题。我从@Spacedman 和@flodel 那里得到了一些不错的答案,他们都建议使用递归函数。两种解决方案都非常相似并且对我有用。

但是我还没有弄清楚如何处理从这些函数中获得的信息。假设我有一个嵌套在级别 i 的列表,我想返回一个包含所有 i-th 级别元素的列表,如下所示:

myList$firstLevel$secondLevel$thirdLevel$fourthLevel
# fourthLevel contains 5 data.frames and thirdLevel has
# three elements

如何从mylist 取回所有 15 个 data.frame? 我正在尝试使用例如

lapply(mylist,"[[",2)

但显然我只是在第一级获得所有列表元素的第二个元素。

编辑:我在extract 各自的?"[[" 的帮助下找到了以下内容,但到目前为止我还不能真正理解它: "[[ can be applied recursively to lists, so that if the single index i is a vector of length p, alist[[i]] is equivalent to alist[[i1]]...[[ip]] providing all but the final indexing results in a list."

编辑: 不想像这样结束嵌套循环。

o <- list()
i=1
for (i in 1:2){
o[[i]] <- mylist[[c(i,1,1,1)]]
} 

【问题讨论】:

  • 这意味着mylist[[ c(1,2) ]]将为您提供mylist的第一个元素的第二个元素。
  • 谢谢 Romain,实际上这很有帮助,因为我可以尝试确定非常关卡的最大值,然后循环遍历它们。所以下一步是:如何递归地找到我的列表的长度?
  • 您是在询问每个级别的长度,还是只询问最低级别列表元素的长度?
  • 抱歉不准确。我的意思是每个级别的长度。
  • 如果在第 4 级,您有您提到的 15 个 data.frames 和一个嵌套列表,您想只返回 15 个 data.frames 还是一起返回所有内容?换句话说,您是只想要特定级别的叶子,还是想要叶子和树枝?

标签: r list operators


【解决方案1】:

与此同时,我找到了答案。不能说是我自己做的。这 link 详细解释了如何使用另一个(复杂的)递归函数来线性化整个嵌套列表 wad。

Akhil S. Behl 提供的解决方案的真正优点是:它处理了 data.frames 也是列表的事实,并且递归可以在 data.frames 之前停止。原来这是我之前的主要问题之一。

【讨论】:

  • 我正在寻找类似问题的解决方案,这个问题听起来很有希望。可悲的是,解决方案的链接不再有效。这就是 SO 不鼓励使用外部链接的原因。
  • @arielf 很抱歉,您对外部链接的看法是正确的。猜猜这是一个菜鸟的错误。已经有一段时间了,但我想我在一个旧项目 github.com/mbannert/gateveys2 中使用了 akhil 的代码。如果是这样,我在 cmets 中给了他荣誉,他的名字应该很容易找到。 Hth
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多