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)
- an atomic object, typically a vector.
- list of one or more factors, each of same length as
X. The elements are coerced to factors by
- the function to be applied, or
NULL. In the case of functions like
%*%, etc., the function name must be backquoted or quoted. If
NULL, tapply returns a vector which can be used to subscript the multi-way array
- optional arguments to
FUN: the Note section.
tapplyalways returns an array of mode
TRUE(the default), then if
FUNalways returns a scalar,
tapplyreturns an array with the mode of the scalar.
FUN is not
NULL, it is passed to
match.fun, and hence it can be a function or a symbol or character string naming a function.
FUN is present,
FUN for each cell that has any data in it. If
FUN returns a single atomic value for each such cell (e.g., functions
var) and when
tapply returns a multi-way array containing the values, and
NA for the empty cells. 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 if the return value has a class (e.g. an object of class
"Date") the class is discarded.
Note that contrary to S,
simplify = TRUE always returns an array, possibly 1-dimensional.
When there is an array answer, its
dimnames are named by the names of
INDEX and are based on the levels of the grouping factors (possibly after coercion).
For a list result, the elements corresponding to empty cells are
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
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
require(stats) groups <- as.factor(rbinom(32, n = 5, prob = 0.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, length = 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)
Documentation reproduced from R 3.0.2. License: GPL-2.