Skip to content

imap(x, ...), an indexed map, is short hand for map2(x, names(x), ...) if x has names, or map2(x, seq_along(x), ...) if it does not. This is useful if you need to compute on both the value and the position of an element.

Usage

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

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

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

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

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

imap_vec(.x, .f, ...)

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

Arguments

.x

A list or atomic vector.

.f

A function, specified in one of the following ways:

  • A named function, e.g. paste.

  • An anonymous function, e.g. \(x, idx) x + idx or function(x, idx) x + idx.

  • A formula, e.g. ~ .x + .y. You must use .x to refer to the current element and .y to refer to the current index. Only recommended if you require backward compatibility with older versions of R.

...

Additional arguments passed on to the mapped function.

We now generally recommend against using ... to pass additional (constant) arguments to .f. Instead use a shorthand anonymous function:

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

This makes it easier to understand which arguments belong to which function and will tend to yield better error messages.

Value

A vector the same length as .x.

See also

Other map variants: lmap(), map(), map2(), map_depth(), map_if(), modify(), pmap()

Examples

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

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

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