More simplification in tapply() result
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, ...)
X |
an atomic object, typically a vector. All these arguments
are as in |
INDEX |
list of (typically more than one) factors, each of same
length as |
FUN |
the function to be applied. For the result to be
simplifiable, |
... |
optional arguments to |
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()
.
Martin Maechler, 14 Jun 1993 (for S-plus).
tapply(*, simplify=TRUE)
.
## 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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.