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. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.