From ggrothendieck at gmail.com  Thu Aug 12 17:33:11 2010
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Thu, 12 Aug 2010 11:33:11 -0400
Subject: [Rd] c.POSIXct
Message-ID: <AANLkTinGcXRQd5+Xmo2ad5HoofdbzhZbEaSznAgCL3vO@mail.gmail.com>

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