From ggrothendieck at gmail.com  Tue Sep 16 17:31:01 2008
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Tue, 16 Sep 2008 11:31:01 -0400
Subject: [Rd] aggregate() does not return POSIXct object correctly
	(PR#12887)
In-Reply-To: <48CFCF1B.9090103@biostat.ku.dk>
References: <20080916140507.E0503282C765@mail.pubhealth.ku.dk>
	<48CFCF1B.9090103@biostat.ku.dk>
Message-ID: <971536df0809160831s4a72ec37o720c347ae7d16571@mail.gmail.com>

On Tue, Sep 16, 2008 at 11:22 AM, Peter Dalgaard
<P.Dalgaard at biostat.ku.dk> wrote:
> 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.
>

Another workaround is:

https://stat.ethz.ch/pipermail/r-help/2008-September/173139.html



[Rd] aggregate() does not return POSIXct object correctly (PR#12887)
Gabor Grothendieck