Lauri Nikkinen
2007-Oct-02 08:44 UTC
[R] Calculating group means using self-written function
Hi R-users, 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
Petr PIKAL
2007-Oct-02 09:49 UTC
[R] Odp: Calculating group means using self-written function
Hi r-help-bounces at r-project.org napsal dne 02.10.2007 10:44:20:> Hi R-users, > > 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 foundNot sure how to do it in doBy but using aggregate aggregate(d$y, list(d$var1,d$f), fun, y=z) probably do what you want Regards Petr> > Best regards > LN > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
Vladimir Eremeev
2007-Oct-02 13:20 UTC
[R] Calculating group means using self-written function
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.