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