# asplit

##### Split Array/Matrix By Its Margins

Split an array or matrix by its margins.

- Keywords
- array

##### Usage

`asplit(x, MARGIN)`

##### Arguments

- x
an array, including a matrix.

- MARGIN
a vector giving the margins to split by. E.g., for a matrix

`1`

indicates rows,`2`

indicates columns,`c(1, 2)`

indicates rows and columns. Where`x`

has named dimnames, it can be a character vector selecting dimension names.

##### Details

The values of the splits can also be obtained (less efficiently) by
`split(x, slice.index(x, MARGIN))`

.

`apply`

always simplifies common length results, so
attempting to split via `apply(x, MARGIN, identity)`

does not
work (as it simply gives `x`

). By chaining `asplit`

with
`lapply`

or `vapply`

, one can obtain variants
of `apply`

which do not auto-simplify.

##### Value

A “list array” with dimension \(dv\) and each element an
array of dimension \(de\) and dimnames preserved as available, where
\(dv\) and \(de\) are, respectively, the dimensions of `x`

included and not included in `MARGIN`

.

##### Examples

`library(base)`

```
# NOT RUN {
## A 3-dimensional array of dimension 2 x 3 x 4:
d <- 2 : 4
x <- array(seq_len(prod(d)), d)
x
## Splitting by margin 2 gives a 1-d list array of length 3
## consisting of 2 x 4 arrays:
asplit(x, 2)
## Spltting by margins 1 and 2 gives a 2 x 3 list array
## consisting of 1-d arrays of length 4:a
asplit(x, c(1, 2))
## Compare to
split(x, slice.index(x, c(1, 2)))
## A 2 x 3 matrix:
(x <- matrix(1 : 6, 2, 3))
## To split x by its rows, one can use
asplit(x, 1)
## or less efficiently
split(x, slice.index(x, 1))
split(x, row(x))
# }
```

*Documentation reproduced from package base, version 3.6.1, License: Part of R 3.6.1*