r - 重塑由 lapply 创建的列表
问题描述
我有纬度和经度的向量:
longDim
[1] -79.65770 -79.21761 -78.77750
latiDim
[1] -39.70588 -39.26471 -38.82353
我想并行循环它们的组合。为此,首先我用expand.grid
所有可能的组合创建了一个数据框:
my.grid <- expand.grid(longDim, latiDim)
然后我mclapply()
在结果数据框的行上使用:
mclapply(1:nrow(my.grid), function(x){some_function})
wheresome_function
返回一个包含两个对象的列表,每个对象的长度为 139。
因此,结果我得到了一个尺寸为 9x2 的嵌套列表,如下所示:
str(l1)
List of 9
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 2
..$ su.25: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ su.30: Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
现在,我需要再次将这个列表从 9x2 重塑为 3x3x2 维度。这是我正在寻找的格式:
str(l2)
List of 3
$ :List of 3
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 3
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
$ :List of 3
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
..$ :List of 2
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
.. ..$ : Named num [1:139] 0 0 0 0 0 0 0 0 0 0 ...
.. .. ..- attr(*, "names")= chr [1:139] "1961" "1962" "1963" "1964" ...
我怎样才能做到这一点?
重现代码l1
,l2
可在以下位置找到:https ://pastebin.com/raw/LTyZi0mp (此处发布太长)
解决方案
We can also use gl
to create a grouping index for split
ing
split(lst, as.integer(gl(length(lst1), 3, length(lst1))))
data
lst1 <- replicate(9, list(list(x = 1:5, y = 1:5)))
推荐阅读
- delphi - ReportBuilder从“数字隐喻”到Delphi QuickReports的异同?
- ios - 按下按钮时推送新的视图控制器
- java - 使用 URLClassLoader 加载类时出现 java.lang.ClassNotFoundException
- python - 如何修改函数以调用第一个函数?
- javascript - 在js文件中使用节点变量
- angularjs - ng-if 内容在 ng-leave 阶段不更新
- c# - 使用 LINQ 计算从 1 到 n 的数字之和
- python - 由于解码错误,无法使用 Python 从 .txt 文件中读取行
- ruby-on-rails - 在 RoR 中使用它们之间的 OR 组合 2 个连接
- devexpress - Developer Express Suite 旧版下载