来自:https://www.rdocumentation.org/packages/purrr/versions/0.2.2/topics/map2我们看到:
State
生成
setState
但如果需要的是:
x <- list(1, 10, 100)
y <- list(1, 2, 3)
map2(x, y, ~ .x + .y)
即:为每个2, 12, 103
添加2, 3, 4, 11, 12, 13, 101, 102, 103
对于循环来说似乎很简单,但是......我显然错过了purrr中显而易见的东西。
答案 0 :(得分:10)
map2
在这里不起作用,因为它在两个列表/向量之间并行迭代,例如Map
或mapply
。相反,您正在寻找cross2
,它会执行两个列表的交叉连接。三个选项:
library(purrr)
x <- list(1, 10, 100)
y <- list(1, 2, 3)
cross2(y, x) %>% invoke_map_dbl(sum, .)
#> [1] 2 3 4 11 12 13 101 102 103
cross2(y, x) %>% map_dbl(~sum(unlist(.x)))
#> [1] 2 3 4 11 12 13 101 102 103
cross2(y, x) %>% simplify_all() %>% map_dbl(sum)
#> [1] 2 3 4 11 12 13 101 102 103
如果您的列表只是数字,则另一个选项是outer
:
outer(unlist(x), unlist(y), `+`)
#> [,1] [,2] [,3]
#> [1,] 2 3 4
#> [2,] 11 12 13
#> [3,] 101 102 103