# [R] Calculating group means using self-written function

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

```