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, ...)
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] "2 1" "5 2" "10 3" "1 4" "4 5" "9 6" "6 7" "8 8" "3 9" "7 10"
imap_chr(sample(10), \(x, idx) paste0(idx, ": ", x))
#> [1] "1: 7" "2: 4" "3: 5" "4: 8" "5: 10" "6: 1" "7: 3" "8: 6"
#> [9] "9: 9" "10: 2"
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