[R] Problem in summaryBy

Rene Braeckman
Thu, 15 Feb 2007 18:34:33 -0000

The R script below gives values of 1 for all minimum values when I use a
custom function in summaryBy. I get the correct values when I use FUN=min
directly. Any help is much appreciated.

The continuous information provided in this forum is fabulous as are the
different R packages available.
Rene

# Simulated simplified data
Subj  <- rep(1:4, each=6)
Analyte <- rep(c(rep("RBV",3),rep("TBV",3)),4)
Dose <- rep(c(200,400,600),8)
AUC <- rnorm(24, c(40,80,120,4,8,12), c(8,16,24,0.8,0.16,0.24))

# The real dataset may have NAs in it
df <- data.frame(Subj, Analyte, Dose, AUC)

myStats <- function(x) {
    count <- function(x) length(na.omit(x))
    pCV <- function(x) sd(x,T) / mean(x,T) * 100
    c(
      n = count(x),
      mean = mean(x,T),
      SD = sd(x,T),
      CV = pCV(x),
      median = median(x,T),
      min = min(x,T),
      max = max(x,T)
      )
}

library(doBy)
# This does not produce correct minimum values
sData <- summaryBy(AUC ~ Analyte + Dose, data=df, FUN=myStats)
# This gives correct minimum values
sMinData <- summaryBy(AUC ~ Analyte + Dose, data=df, FUN=min)

Here are the results:
> sData
  Analyte Dose AUC.n   AUC.mean     AUC.SD    AUC.CV AUC.median AUC.min
AUC.max
1     RBV  200     4  32.353673 11.4244263 35.311064  32.353673       1
46.068889
2     RBV  400     4  78.568606 17.0237534 21.667374  78.568606       1
100.974408
3     RBV  600     4 112.726681  9.1481701  8.115355 112.726681       1
128.550651
4     TBV  200     4   4.283628  1.3773728 32.154348   4.283628       1
4.837139
5     TBV  400     4   8.036309  0.1166662  1.451739   8.036309       1
8.208499
6     TBV  600     4  12.041576  0.1535308  1.275006  12.041576       1
12.179628
> sMinData
  Analyte Dose    AUC.min
1     RBV  200  18.720478
2     RBV  400  61.422756
3     RBV  600 108.461962
4     TBV  200   1.779275
5     TBV  400   7.944623
6     TBV  600  11.853593