[R] Calculating group means using self-written function

Vladimir Eremeev wl2776 at gmail.com
Tue Oct 2 15:20:07 CEST 2007



Lauri Nikkinen wrote:
> 
> Suppose I have a following data set.
> 
> y1 <- rnorm(20) + 6.8
> y2 <- rnorm(20) + (1:20*1.7 + 1)
> y3 <- rnorm(20) + (1:20*6.7 + 3.7)
> y <- c(y1,y2,y3)
> var1 <- rep(1:5,12)
> z <- rep(1:6,10)
> f <- gl(3,20, labels=paste("lev", 1:3, sep=""))
> d <- data.frame(var1=var1, z=z,y=y, f=f)
> 
> Using following code I can calculate group means
> 
> library(doBy)
> summaryBy(y ~ f + var1, data=d, FUN=mean)
> 
> How do I have to modify the FUN argument if I want to calculate mean
> using unique values
> 
> for instance
> 
> fun <- function(x, y) sum(x)/length(unique(y))
> summaryBy(y ~ f + var1, data=d, FUN=fun(y, z)
> 
> Error in get(x, envir, mode, inherits) : variable "currFUN" of mode
> "function" was not found
> 
> Best regards
> LN
> 

Your first call to summaryBy suggests, that the argument FUN must be a name
of a function.
fun(y,z) in the second call is evaluated before call to summaryBy.

fun(y,z) returns a single number, so you have 
summaryBy(y ~ f + var1, data=d, FUN=331.9017)

summaryBy wants to call FUN(x) and use its result and check if it is valid. 
It cannot call 331.9017 and gives the error.

Probably, you might want to change your code for something like following

fun <- function(x, y=1) sum(x)/length(unique(y))
summaryBy(y ~ f + var1, data=d, FUN=fun, y=z)

More details should be given in ?summaryBy
-- 
View this message in context: http://www.nabble.com/Calculating-group-means-using-self-written-function-tf4553726.html#a12998681
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list