[R] Problem in summaryBy

Duncan Murdoch
Thu, 15 Feb 2007 18:43:15 -0000

On 2/15/2007 1:34 PM, Rene Braeckman wrote:
> 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 man page for min lists the header as

min(..., na.rm=FALSE)

so the T you're using is being taken as data, and being coerced to 1.

Some other advice:  name your parameters in a call.  min(x, na.rm=TRUE)
would work.

Use TRUE, not T.  In R TRUE is a constant, and T is a variable name.
You might have T <- 0, in which case

if (T) cat("TRUE!!\n") else cat("FALSE!!\n")

would print FALSE!!.

Duncan Murdoch

> 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
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.