map_along_dim(X, dim, func) is a simple wrapper around split_along_dim(X, dim) %>% map(func). It is conceptually and functionally equivalent to base::apply(), with the following key differences:

  • it is guaranteed to return a list (base::apply() attempts to simplify the output to an array, sometimes unsuccessfully, making the output unstable)

  • it accepts the compact lambda notation ~.x just like in purrr::map (and modify_along_dim())

map_along_dim(X, .dim, .f, ...)

map_along_rows(X, .f, ...)

map_along_cols(X, .f, ...)

Arguments

X

an R array

.dim

which dimension to map along. Passed on to split_along_dim(), and accepts all the same inputs. Valid inputs include

  • positive integers (index position(s) of dimension),

  • negative integers (index positions(s) of dimensions, counting from the back), or

  • character vector (corresponding to array dimnames)

.f

A function, string of a function name, or purrr style compact lambda syntax (e.g, ~.x + 1)

...

passed on to .f()

Value

An R list

Examples

X <- matrix2(letters[1:15], ncol = 3) apply(X, 1, function(x) paste(x, collapse = "")) # simplifies to a vector
#> [1] "abc" "def" "ghi" "jkl" "mno"
map_along_dim(X, 1, ~paste(.x, collapse = "")) # returns a list
#> [[1]] #> [1] "abc" #> #> [[2]] #> [1] "def" #> #> [[3]] #> [1] "ghi" #> #> [[4]] #> [1] "jkl" #> #> [[5]] #> [1] "mno" #>
identical( map_along_rows(X, identity), map_along_dim(X, 1, identity)) # TRUE
#> [1] TRUE
identical( map_along_cols(X, identity), map_along_dim(X, -1, identity)) # TRUE
#> [1] TRUE