10.4 map2 系列函数

map2 系列函数是对 map 系列函数的升级,map 系列函数是一个列表参数,而 map2 系列是两个列表参数。常用函数如下:

map2(.x, .y, .f, ...)

map2_lgl(.x, .y, .f, ...)

map2_int(.x, .y, .f, ...)

map2_dbl(.x, .y, .f, ...)

map2_chr(.x, .y, .f, ...)

map2_raw(.x, .y, .f, ...)

map2_dfr(.x, .y, .f, ..., .id = NULL)

map2_dfc(.x, .y, .f, ...)

walk2(.x, .y, .f, ...)

两个列表相加

x <- list(1, 1, 1)
y <- list(10, 20, 30)

map2(x, y, ~ .x + .y)
#> [[1]]
#> [1] 11
#> 
#> [[2]]
#> [1] 21
#> 
#> [[3]]
#> [1] 31
map2(x, y, `+`)
#> [[1]]
#> [1] 11
#> 
#> [[2]]
#> [1] 21
#> 
#> [[3]]
#> [1] 31

两个向量分别相加后构造新的数据框

ex_fun <- function(arg1, arg2){
col <- arg1 + arg2
x <- as.data.frame(col)
}
arg1 <- 1:4
arg2 <- 10:13
map2_dfr(arg1, arg2, ex_fun)
#>   col
#> 1  11
#> 2  13
#> 3  15
#> 4  17
map2_dfc(arg1, arg2, ex_fun)
#> New names:
#> * col -> col...1
#> * col -> col...2
#> * col -> col...3
#> * col -> col...4
#>   col...1 col...2 col...3 col...4
#> 1      11      13      15      17

两个列表中取较小值

df <- data.frame(
  x = c(1, 2, 5),
  y = c(5, 4, 8)
)

pmin(df$x, df$y)
#> [1] 1 2 5
map2_dbl(df$x, df$y, min)
#> [1] 1 2 5