From ggrothendieck at gmail.com  Thu Aug 19 00:23:22 2010
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed, 18 Aug 2010 18:23:22 -0400
Subject: [Rd] c.POSIXct
In-Reply-To: <AANLkTinGcXRQd5+Xmo2ad5HoofdbzhZbEaSznAgCL3vO@mail.gmail.com>
References: <AANLkTinGcXRQd5+Xmo2ad5HoofdbzhZbEaSznAgCL3vO@mail.gmail.com>
Message-ID: <AANLkTin=8k4UfBqzjQmHa9ntQP3V9zhuhsfkL_qzZyWi@mail.gmail.com>

No one answered this so I submitted it to the bugs system and there I
got the response that it is documented behavior; however, whether its
documented or not is hardly the point -- its undesirable that tzone is
lost when using c.

On Thu, Aug 12, 2010 at 11:33 AM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> Currently if x1 and x2 are POSIXct then c(x1, x2) will not have a
> tzone attribute even if x1 or x2 or both do but it should.
>
> This could be fixed with the following c.POSIXct:
>
> c.POSIXct <- function (..., recursive = FALSE) {
> ? ? ? ?tzones <- lapply(list(...), attr, which = "tzone")
> ? ? ? ?lengths <- sapply(tzones, length)
> ? ? ? ?if (any(lengths > 1)) stop("tzone cannot have length greater than 1")
> ? ? ? ?which <- sapply(tzones, length) == 1
> ? ? ? ?tzone <- unique(unlist(tzones[which]))
> ? ? ? ?if (length(tzone) != 1) tzone <- NULL
> structure(c(unlist(lapply(list(...), unclass))), class = c("POSIXt",
> ? ?"POSIXct"), tzone = tzone)
> }
>
> # test
> x1 <- Sys.time()
> x2 <- structure(x1, tzone = "UTC")
> x3 <- structure(x1, tzone = "other")
>
> # these all currently give NULL but with
> # above give indicated value
>
> attr(c(x1, x1), "tzone") # NULL
> attr(c(x2, x2), "tzone") # "UTC"
> attr(c(x1, x2), "tzone") # "UTC"
> attr(c(x2, x1), "tzone") # "UTC"
> attr(c(x1, x2, x3), "tzone") # NULL
>



[Rd] c.POSIXct
Gabor Grothendieck