當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。