[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