[Rd] c.POSIXct

Gabor Grothendieck ggrothendieck at gmail.com
Thu Aug 12 17:33:11 CEST 2010


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



More information about the R-devel mailing list