sfsmisc (version 1.1-8)

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, …)

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.

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

See Also

tapply(*, simplify=TRUE).

Examples

Run this code
# NOT RUN {
  ## 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 DataCamp Workspace