sfsmisc (version 1.1-17)

tapplySimpl: More simplification in tapply() result

Description

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.

Usage

tapplySimpl(X, INDEX, FUN, ...)

Value

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().

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.

Author

Martin Maechler, 14 Jun 1993 (for S-plus).

See Also

tapply(*, simplify=TRUE).

Examples

Run this code
  ## 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)

Run the code above in your browser using DataLab