[R] tapply and more than one function, with different arguments
    RINNER Heinrich 
    HEINRICH.RINNER at tirol.gv.at
       
    Tue Jan 26 17:26:10 CET 2010
    
    
  
Dear R-users,
I am working with R version 2.10.1.
Say I have is a simple function like this:
> my.fun <- function(x, mult) mult*sum(x)
Now, I want to apply this function along with some other (say 'max') to a simple data.frame, like:
> dat <- data.frame(x = 1:4, grp = c("a","a","b","b"))
Ideally, the result would look something like this (if mult = 10):
  max my.fun
a   2     30
b   4     70
I have tried it that way:
apply.more.functions <- function(dat, FUN = c("max", "my.fun"), ...) {
  res <- NULL
  for(f in FUN) res[[f]] <- tapply(dat$x, dat$grp, FUN = f, ...)
  data.frame(res)
}
# let's test it:
> apply.more.functions(dat, FUN = c("max", "min"))
  max min
a   2   1
b   4   3
# perfect!
# now, with an additional argument:
> apply.more.functions(dat, FUN = c("max", "my.fun"), mult = 10)
  max my.fun
a  10     30
b  10     70
# uhuh!
Apparently, 'mult' has been used in the calculation of 'max' as well.
How can I modify apply.more.functions in order to avoid this?
Your advice would be appreciated;
Kind regards
Heinrich.
    
    
More information about the R-help
mailing list