[R] using "mean" in by(x,y,mean)

Liaw, Andy andy_liaw at merck.com
Thu Jul 15 00:04:14 CEST 2004


> From: Sundar Dorai-Raj
> 
> William Revelle wrote:
> 
> > Dear list friends
> > 
> > I fail to understand how to find means for multiple groups 
> using the 
> > by() function. Help would be appreciated. Thanks.
> > Bill
> > 
> > 
> > x <- runif(20,0,10)
> > group <- rep(c("A","B"),10)
> > df <-data.frame(x,group)
> > #df            #show the data
> > 
> > rm(x,group)
> > attach(df)
> > 
> > sd(x)       # sd is defined
> > mean(x)     #so is mean
> > 
> > by(x,group,sd)   #this works for both groups
> > by(x,group,mean)  #this does not
> > 
> > 
> > produces this output:
> > 
> > 
> >>  x <- runif(20,0,10)
> >>  group <- rep(c("A","B"),10)
> >>  df <-data.frame(x,group)
> >>  #df            #show the data
> >>
> >>  rm(x,group)
> >>  attach(df)
> >>
> >>  sd(x)       # sd is defined
> > 
> > [1] 2.952699
> > 
> >>  mean(x)     #so is mean
> > 
> > [1] 5.026441
> > 
> >>
> >>  by(x,group,sd)   #this works for both groups
> > 
> > INDICES: A
> > [1] 2.813504
> > 
> --------------------------------------------------------------
> ---------------------------------------------- 
> > 
> > INDICES: B
> > [1] 3.236663
> > 
> >>  by(x,group,mean)  #this does not
> > 
> > Error in FUN(X[[as.integer(1)]], ...) : couldn't find function "FUN"
> > 
> > 
> > I am using a Mac OS 10.3.4 running R 1.9.1
> 
> Hi Bill,
> 
> Works for me. Do you have a local "mean" defined? Try 
> rm(mean) and re-try.
> 
>  > R.version
>           _
> platform i386-pc-mingw32
> arch     i386
> os       mingw32
> system   i386, mingw32
> status
> major    1
> minor    9.1
> year     2004
> month    06
> day      21
> language R
> 
> --sundar

Or try replacing `mean' with `base:::mean'.  BTW, why not just use tapply(x,
group, mean)?

Andy




More information about the R-help mailing list