【发布时间】: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 还是一起返回所有内容?换句话说,您是只想要特定级别的叶子,还是想要叶子和树枝?