Я пытаюсь найти краткий способ применения функции к комбинациям списков - с возможным расширением параллельных вычислений. Мне кажется, что функция cross () из пакета purrr не может возвращать списки в качестве вывода.
Я попробовал вложенное приложение.
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 лет.