这些函数是 map()
的变体,一次迭代两个参数。
用法
map2(.x, .y, .f, ..., .progress = FALSE)
map2_lgl(.x, .y, .f, ..., .progress = FALSE)
map2_int(.x, .y, .f, ..., .progress = FALSE)
map2_dbl(.x, .y, .f, ..., .progress = FALSE)
map2_chr(.x, .y, .f, ..., .progress = FALSE)
map2_vec(.x, .y, .f, ..., .ptype = NULL, .progress = FALSE)
walk2(.x, .y, .f, ..., .progress = FALSE)
参数
- .x, .y
-
一对向量,通常长度相同。如果不是,长度为 1 的向量将被回收到另一个向量的长度。
- .f
-
一个函数,通过以下方式之一指定:
-
一个命名函数。
-
匿名函数,例如
\(x, y) x + y
或function(x, y) x + y
。 -
一个公式,例如
~ .x + .y
。您必须使用.x
来引用x
的当前元素,并使用.y
来引用y
的当前元素。仅当您需要向后兼容旧版本的 R 时才推荐。
-
- ...
-
传递给映射函数的附加参数。
我们现在通常建议不要使用
...
将附加(常量)参数传递给.f
。相反,使用简写匿名函数:# Instead of x |> map(f, 1, 2, collapse = ",") # do: x |> map(\(x) f(x, 1, 2, collapse = ","))
这使得更容易理解哪些参数属于哪个函数,并且往往会产生更好的错误消息。
- .progress
-
是否显示进度条。使用
TRUE
打开基本进度条,使用字符串为其命名,或参阅progress_bars 了解更多详细信息。 - .ptype
-
如果是
NULL
,默认情况下,输出类型是结果元素的公共类型。否则,提供 "prototype" 给出所需的输出类型。
值
输出长度由输入的长度决定。输出名称由输入名称确定。输出类型由后缀确定:
-
无后缀:列表;
.f()
可以返回任何内容。 -
_lgl()
、_int()
、_dbl()
、_chr()
分别返回逻辑向量、整数向量、双精度向量或字符向量;.f()
必须返回长度为 1 的兼容原子向量。 -
_vec()
返回原子或 S3 向量,与.f
返回的类型相同。.f
可以返回几乎任何类型的向量,只要其长度为 1。 -
walk()
返回输入.x
(不可见)。这使得它很容易在管道中使用。.f()
的返回值被忽略。
.f
引发的任何错误都将包含在类 purrr_error_indexed 的错误中。
例子
x <- list(1, 1, 1)
y <- list(10, 20, 30)
map2(x, y, \(x, y) x + y)
#> [[1]]
#> [1] 11
#>
#> [[2]]
#> [1] 21
#>
#> [[3]]
#> [1] 31
#>
# Or just
map2(x, y, `+`)
#> [[1]]
#> [1] 11
#>
#> [[2]]
#> [1] 21
#>
#> [[3]]
#> [1] 31
#>
# Split into pieces, fit model to each piece, then predict
by_cyl <- mtcars |> split(mtcars$cyl)
mods <- by_cyl |> map(\(df) lm(mpg ~ wt, data = df))
map2(mods, by_cyl, predict)
#> $`4`
#> Datsun 710 Merc 240D Merc 230 Fiat 128
#> 26.47010 21.55719 21.78307 27.14774
#> Honda Civic Toyota Corolla Toyota Corona Fiat X1-9
#> 30.45125 29.20890 25.65128 28.64420
#> Porsche 914-2 Lotus Europa Volvo 142E
#> 27.48656 31.02725 23.87247
#>
#> $`6`
#> Mazda RX4 Mazda RX4 Wag Hornet 4 Drive Valiant
#> 21.12497 20.41604 19.47080 18.78968
#> Merc 280 Merc 280C Ferrari Dino
#> 18.84528 18.84528 20.70795
#>
#> $`8`
#> Hornet Sportabout Duster 360 Merc 450SE
#> 16.32604 16.04103 14.94481
#> Merc 450SL Merc 450SLC Cadillac Fleetwood
#> 15.69024 15.58061 12.35773
#> Lincoln Continental Chrysler Imperial Dodge Challenger
#> 11.97625 12.14945 16.15065
#> AMC Javelin Camaro Z28 Pontiac Firebird
#> 16.33700 15.44907 15.43811
#> Ford Pantera L Maserati Bora
#> 16.91800 16.04103
#>
相关用法
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map_depth 在给定深度映射/修改元素
- R purrr map_dfr 返回数据帧的函数
- R purrr map 将函数应用于向量的每个元素
- R purrr modify_in 修改拔取位置
- R purrr modify_tree 递归修改列表
- R purrr modify 有选择地修改元素
- R purrr accumulate 累积向量缩减的中间结果
- R purrr imap 将函数应用于向量的每个元素及其索引
- R purrr list_transpose 转置列表
- R purrr as_vector 将列表强制转换为向量
- R purrr array-coercion 强制数组列出
- R purrr auto_browse 包装一个函数,以便在出错时自动 browser()
- R purrr pluck 安全地获取或设置嵌套数据结构深处的元素
- R purrr insistently 将函数转换为等待,然后在错误后重试
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr rerun 多次重新运行表达式
- R purrr quietly 包装一个函数来捕获副作用
- R purrr list_flatten 压平列表
- R purrr pmap 同时映射多个输入(“并行”)
- R purrr possibly 包装函数以返回值而不是错误
- R purrr head_while 查找全部满足谓词的头/尾。
- R purrr rbernoulli 从伯努利分布生成随机样本
- R purrr rate-helpers 创建延迟率设置
- R purrr keep_at 根据元素的名称/位置保留/丢弃元素
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Map over two inputs。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。