apply {base} | R Documentation |

Returns a vector or array or list of values obtained by applying a function to margins of an array.

apply(X, MARGIN, FUN, ...)

`X` |
the array to be used. |

`MARGIN` |
a vector giving the subscripts which the function will
be applied over.
`1` indicates rows, `2` indicates columns,
`c(1,2)` indicates rows and columns. |

`FUN` |
the function to be applied: see Details.
In the case of functions like `+` , `%*%` , etc., the
function name must be backquoted or quoted. |

`...` |
optional arguments to `FUN` . |

If `X`

is not an array but has a dimension attribute,
`apply`

attempts to coerce it to an array via `as.matrix`

if it is two-dimensional (e.g., data frames) or via `as.array`

.

`FUN`

is found by a call to `match.fun`

and typically
is either a function or a symbol (e.g. a backquoted name) or a
character string specifying a function to be searched for from the
environment of the call to `apply`

.

If each call to `FUN`

returns a vector of length `n`

, then
`apply`

returns an array of dimension `c(n, dim(X)[MARGIN])`

if `n > 1`

. If `n`

equals `1`

, `apply`

returns a
vector if `MARGIN`

has length 1 and an array of dimension
`dim(X)[MARGIN]`

otherwise.
If `n`

is `0`

, the result has length 0 but not necessarily
the “correct” dimension.

If the calls to `FUN`

return vectors of different lengths,
`apply`

returns a list of length `prod(dim(X)[MARGIN])`

with
`dim`

set to `MARGIN`

if this has length greater than one.

In all cases the result is coerced by `as.vector`

to one
of the basic vector types before the dimensions are set, so that (for
example) factor results will be coerced to a character array.

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
*The New S Language*.
Wadsworth & Brooks/Cole.

`lapply`

, `tapply`

, and convenience functions
`sweep`

and `aggregate`

.

## Compute row and column sums for a matrix: x <- cbind(x1 = 3, x2 = c(4:1, 2:5)) dimnames(x)[[1]] <- letters[1:8] apply(x, 2, mean, trim = .2) col.sums <- apply(x, 2, sum) row.sums <- apply(x, 1, sum) rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums))) stopifnot( apply(x, 2, is.vector)) # not ok in R <= 0.63.2 ## Sort the columns of a matrix apply(x, 2, sort) ##- function with extra args: cave <- function(x, c1, c2) c(mean(x[c1]), mean(x[c2])) apply(x,1, cave, c1="x1", c2=c("x1","x2")) ma <- matrix(c(1:4, 1, 6:8), nr = 2) ma apply(ma, 1, table) #--> a list of length 2 apply(ma, 1, quantile)# 5 x n matrix with rownames stopifnot(dim(ma) == dim(apply(ma, 1:2, sum)))## wasn't ok before R 0.63.1 ## Example with different lengths for each call z <- array(1:24, dim=2:4) zseq <- apply(z, 1:2, function(x) seq(length=max(x))) zseq ## a 2 x 3 matrix typeof(zseq) ## list dim(zseq) ## 2 3 zseq[1,] apply(z, 3, function(x) seq(length=max(x))) # a list without a dim attribute

[Package *base* version 2.5.0 Index]