tapply {base} | R Documentation |

Apply a function to each cell of a ragged array, that is to each (non-empty) group of values given by a unique combination of the levels of certain factors.

tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)

`X` |
an atomic object, typically a vector. |

`INDEX` |
list of factors, each of same length as `X` . |

`FUN` |
the function to be applied. In the case of functions like
`+` , `%*%` , etc., the function name must be quoted. If
`FUN` is `NULL` , tapply returns a vector which can be used
to subscript the multi-way array `tapply` normally produces. |

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

`simplify` |
If `FALSE` , `tapply` always returns an array
of mode `"list"` . If `TRUE` (the default), then if
`FUN` always returns a scalar, `tapply` returns an array
with the mode of the scalar. |

When `FUN`

is present, `tapply`

calls `FUN`

for each
cell that has any data in it. If `FUN`

returns a single atomic
value for each cell (e.g., functions `mean`

or `var`

) and
when `simplify`

is `TRUE`

, `tapply`

returns a multi-way
array containing the values. The array has the same number of
dimensions as `INDEX`

has components; the number of levels in a
dimension is the number of levels (`nlevels()`

) in the
corresponding component of `INDEX`

.

Note that contrary to S, `simplify = TRUE`

always returns an
array, possibly 1-dimensional.

If `FUN`

does not return a single atomic value, `tapply`

returns an array of mode `list`

whose components are the
values of the individual calls to `FUN`

, i.e., the result is a
list with a `dim`

attribute.

Note that optional arguments to `FUN`

supplied by the
`...`

argument are not divided into cells. It is therefore
inappropriate for `FUN`

to expect additional arguments with
the same length as `X`

.

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

the convenience functions `by`

and
`aggregate`

(using `tapply`

);
`apply`

,
`lapply`

with its versions
`sapply`

and `mapply`

.

require(stats) groups <- as.factor(rbinom(32, n = 5, p = .4)) tapply(groups, groups, length) #- is almost the same as table(groups) ## contingency table from data.frame : array with named dimnames tapply(warpbreaks$breaks, warpbreaks[,-1], sum) tapply(warpbreaks$breaks, warpbreaks[, 3, drop = FALSE], sum) n <- 17; fac <- factor(rep(1:3, len = n), levels = 1:5) table(fac) tapply(1:n, fac, sum) tapply(1:n, fac, sum, simplify = FALSE) tapply(1:n, fac, range) tapply(1:n, fac, quantile) ## example of ... argument: find quarterly means tapply(presidents, cycle(presidents), mean, na.rm = TRUE) ind <- list(c(1, 2, 2), c("A", "A", "B")) table(ind) tapply(1:3, ind) #-> the split vector tapply(1:3, ind, sum)

[Package *base* version 2.5.0 Index]