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


R purrr imap 將函數應用於向量的每個元素及其索引


imap(x, ...) 是一個索引映射,如果 x 有名稱,則為 map2(x, names(x), ...) 的簡寫形式,如果沒有名稱,則為 map2(x, seq_along(x), ...) 的簡寫形式。如果您需要計算元素的值和位置,這非常有用。

用法

imap(.x, .f, ...)

imap_lgl(.x, .f, ...)

imap_chr(.x, .f, ...)

imap_int(.x, .f, ...)

imap_dbl(.x, .f, ...)

iwalk(.x, .f, ...)

參數

.x

列表或原子向量。

.f

一個函數,通過以下方式之一指定:

  • 命名函數,例如paste

  • 匿名函數,例如\(x, idx) x + idxfunction(x, idx) x + idx

  • 一個公式,例如~ .x + .y 。您必須使用.x 來引用當前元素,並使用.y 來引用當前索引。僅當您需要向後兼容舊版本的 R 時才推薦。

...

傳遞給映射函數的附加參數。

我們現在通常建議不要使用 ... 將附加(常量)參數傳遞給 .f 。相反,使用簡寫匿名函數:

# Instead of
x |> map(f, 1, 2, collapse = ",")
# do:
x |> map(\(x) f(x, 1, 2, collapse = ","))

這使得更容易理解哪些參數屬於哪個函數,並且往往會產生更好的錯誤消息。

.x 長度相同的向量。

也可以看看

其他Map變體: lmap()map2()map_depth()map_if()map()modify()pmap()

例子

imap_chr(sample(10), paste)
#>  [1] "5 1"  "7 2"  "2 3"  "3 4"  "1 5"  "10 6" "8 7"  "6 8"  "9 9"  "4 10"

imap_chr(sample(10), \(x, idx) paste0(idx, ": ", x))
#>  [1] "1: 5"  "2: 3"  "3: 8"  "4: 6"  "5: 10" "6: 1"  "7: 2"  "8: 7" 
#>  [9] "9: 4"  "10: 9"

iwalk(mtcars, \(x, idx) cat(idx, ": ", median(x), "\n", sep = ""))
#> mpg: 19.2
#> cyl: 6
#> disp: 196.3
#> hp: 123
#> drat: 3.695
#> wt: 3.325
#> qsec: 17.71
#> vs: 0
#> am: 0
#> gear: 4
#> carb: 2
源代碼:R/imap.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Apply a function to each element of a vector, and its index。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。