当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R purrr map2 映射两个输入


这些函数是 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 + yfunction(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 的错误中。

也可以看看

其他Map变体: imap()lmap()map_depth()map_if()map()modify()pmap()

例子

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/map2.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Map over two inputs。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。