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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。