首页 > 解决方案 > 将函数应用于 R 中两个列表的所有组合

问题描述

我试图找到一种简洁的方法来在列表组合上应用函数 - 可能扩展做并行计算。在我看来,purrr 包中的 cross() 函数无法将列表作为输出返回。

我尝试了嵌套的 lapply。

data1 <- list(a = xts(rep(2, 10), as.Date(1:10)), b = xts(rep(3, 10), as.Date(1:10)), c = xts(rep(4, 10), as.Date(1:10)))
data2 <- list(a = xts(rep(1.5, 10), as.Date(1:10)), b = xts(rep(2.5, 10), as.Date(1:10)), c = xts(rep(3.5, 10), as.Date(1:10)), d = xts(rep(4.5, 10), as.Date(1:10)))
data <- lapply(data1, function(x) lapply(data2, function(y) y+x))
data <- rlist::list.flatten(data)
sapply(data, first)
# similar to
# outer(c(2,3,4), c(1.5,2.5,3.5,4.5), '+')
# but returns new lists as output

最佳情况是快速并行解决方案。我的实际列表每个包含大约 2000 个元素,其中每个 xts 大约有 15 年的时间。

标签: rlistpurrr

解决方案


推荐阅读