10.2 常规用法

10.2.1 map 系列

  • map

用map循环迭代,map函数始终返回list对象。

library(tidyverse)
# 定义一个加10的函数
addTen <- function(.x) {
  return(.x + 10)
}
map(.x = c(1, 4, 7), .f = addTen)
#> [[1]]
#> [1] 11
#> 
#> [[2]]
#> [1] 14
#> 
#> [[3]]
#> [1] 17
  • map_dbl

用map_dbl循环迭代,map_dbl函数返回vector。


add1 <- function(x) {
  (x+1)*x
}
result1 <- map_dbl(1:1000,add1) 

map_dbl()输出结果格式为向量。

for 循环版本:


result2 <- vector(length = 1000)
for(i in 1:1000){
  result2[i] <- (i+1) * i
}
# 检查结果是否一样
identical(result1,result2)
#> [1] TRUE

10.2.2 pmap 系列

使用pmap可以实现多参数时的向量化迭代,功能极其强大。

x <- list(1, 1, 1)
y <- list(10, 20, 30)
z <- list(100, 200, 300)
pmap(list(x, y, z), sum)
#> [[1]]
#> [1] 111
#> 
#> [[2]]
#> [1] 221
#> 
#> [[3]]
#> [1] 331

借助数据框实现多个参数的向量化:

df <- data.frame(
  x = c("apple", "banana", "cherry"),
  pattern = c("p", "n", "h"),
  replacement = c("P", "N", "H"),
  stringsAsFactors = FALSE
  )
pmap(df, gsub)
#> [[1]]
#> [1] "aPPle"
#> 
#> [[2]]
#> [1] "baNaNa"
#> 
#> [[3]]
#> [1] "cHerry"