【发布时间】:2013-11-17 05:28:54
【问题描述】:
我在编写foreach 循环时犯了一个愚蠢的错误。循环的每次迭代都会返回一个矩阵,除了我给它的参数.combine=list:
library(foreach)
nested <- foreach(i = 1:4, .combine=list) %do% {
matrix(i, 2, 2)
}
结果是一个递归嵌套的列表结构:nested[[2]] 给了我第四个矩阵,nested[[1]][[2]] 给了我第三个矩阵,nested[[1]][[1]][[2]] 给了我第二个矩阵,最后nested[[1]][[1]][[1]] 给了我第一个矩阵:
> nested
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[,1] [,2]
[1,] 1 1
[2,] 1 1
[[1]][[1]][[2]]
[,1] [,2]
[1,] 2 2
[2,] 2 2
[[1]][[2]]
[,1] [,2]
[1,] 3 3
[2,] 3 3
[[2]]
[,1] [,2]
[1,] 4 4
[2,] 4 4
这是一个小例子来演示我的问题是什么样的;我的实际结果是一个嵌套更深的列表。在没有 .combine=list 参数的情况下再次运行我的 foreach 循环,是否有一种简单的方法可以将其展平为每个元素都是矩阵的单个列表?
【问题讨论】:
-
是的,这正是我所需要的!
-
也感兴趣:stackoverflow.com/questions/8139677/…。特别是 Aaron 的
flatten4。