For the case of more than two categories or indices (in INDEX), traditional tapply(*, simplify = TRUE) still returns a list when an array may seem more useful and natural. This is provided by tapplySimpl() if the function FUN() is defined such as to return a vector of the same length in all cases.
tapplySimpl(X, INDEX, FUN,...)
Arguments
X: an atomic object, typically a vector. All these arguments are as in tapply() and are passed to tapply(..).
INDEX: list of (typically more than one) factors, each of same length as X.
FUN: the function to be applied. For the result to be simplifiable, FUN() must return a vector of always the same length.
...: optional arguments to FUN.
Returns
If the above conditions are satisfied, the list returned from r <- tapply(X, INDEX, FUN, ...) is simplified into an array of rank 1+#{indices}, i.e., 1+length(INDEX); otherwise, tapplySimpl() returns the list r, i.e., the same as tapply().
Author(s)
Martin Maechler, 14 Jun 1993 (for S-plus).
See Also
tapply(*, simplify=TRUE).
Examples
## Using tapply() would give a list (with dim() of a matrix);## here we get 3-array: data(esoph) with(esoph,{ mima <<- tapplySimpl(ncases/ncontrols, list(agegp, alcgp), range) stopifnot(dim(mima)== c(2, nlevels(agegp), nlevels(alcgp)))}) aperm(mima)