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
orfunction(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:This makes it easier to understand which arguments belong to which function and will tend to yield better error messages.
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