2012-11-19 30 views
4

或换个说法:我如何在嵌套列表中使用[[运算符?如何选择特定嵌套级别的列表中的所有元素?

当我问及如何确定列表的深度级别时,可以将此视为对one的后续问题。我从@Spacedman和@ flodel得到了一些体面的答案,他们都提出了递归函数。这两个解决方案非常相似,并为我工作。

但是我还没有想出如何处理从这些函数中获得的信息。比方说,我有嵌套在i级列表,我想回到一个包含所有i-th级别的元素,像这样的列表:

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

我怎样才能找回从mylist所有15个data.frames? 我正在尝试使用例如

lapply(mylist,"[[",2) 

但很明显,我只是得到第一级所有列表元素的第二个元素。

编辑:我发现在extract respectivel ?"[["的帮助下,但并不能真正总结我的头周围至今: "[[ 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)]] 
} 
+4

这意味着'mylist [[c(1,2)]]'会为你提供'mylist'第一个元素的第二个元素。 –

+0

谢谢罗曼,实际上这有助于我可以尝试确定非常高的最大值,然后通过它们循环。所以下一步将是:如何递归地查找我的列表的长度? –

+0

您是要求每个级别的长度,还是仅仅是最低级别列表元素的长度? –

回答

0

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

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

+0

我正在寻找类似问题的解决方案,这个问题听起来很有希望。可悲的是,解决方案的链接不再有效。这就是为什么SO不鼓励使用外部链接。 – arielf

+0

@arielf对不起,你对外部链接是正确的。猜猜这是一个菜鸟的错误。这已经有一段时间了,但我认为我在一个旧项目https://github.com/mbannert/gateveys2中使用了akhil的代码。如果是的话,我在评论中给了他信用,他的名字应该很容易找到。 Hth –

+0

谢谢,感谢新的参考 – arielf

相关问题