From P.Dalgaard at biostat.ku.dk  Tue Sep 16 17:22:03 2008
From: P.Dalgaard at biostat.ku.dk (Peter Dalgaard)
Date: Tue, 16 Sep 2008 17:22:03 +0200
Subject: [Rd] aggregate() does not return POSIXct object correctly
	(PR#12887)
In-Reply-To: <20080916140507.E0503282C765@mail.pubhealth.ku.dk>
References: <20080916140507.E0503282C765@mail.pubhealth.ku.dk>
Message-ID: <48CFCF1B.9090103@biostat.ku.dk>

rene.locher at zhaw.ch wrote:
> Full_Name: Rene Locher
> Version: 2.7.2 Patched (2008-09-12 r46541)
> OS: XP
> Submission from: (NULL) (160.85.231.40)
>
>
> dat <- data.frame(event=factor(c("A","A","B")),
>                   time=as.POSIXct(c("2008-01-10","2008-01-01","2008-01-04")))
>
> min(dat$time)
> ## "2008-01-01 CET"
> ## as expected
>
> aggregate(dat$time,by=list(event=dat$event),min)
> ## results in
> ##    event          x
> ##  1     A 1199142000
> ##  2     B 1199401200
>
> ## I expected:
> ##    event                x
> ##  1     A "2008-01-01 CET"
> ##  2     B "2008-01-04 CET"
>   

This is as documented, possibly annoying, but not a bug.

aggregate() is documented to build on tapply() for which the discarding
of class is documented on ?tapply. The root cause is unlist():

> tapply(dat[["time"]],dat$event,min,simplify=FALSE)
$A
[1] "2008-01-01 CET"

$B
[1] "2008-01-04 CET"

> unlist(tapply(dat[["time"]],dat$event,min,simplify=FALSE))
         A          B
1199142000 1199401200

and a partial rationale is that unlist() wouldn't know what to do if the
arguments had different classes.
The workaround is, of course, just to stick the class back on.




-- 
   O__  ---- Peter Dalgaard             ?ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



[Rd] aggregate() does not return POSIXct object correctly (PR#12887)
Peter Dalgaard