From simon.urbanek at r-project.org  Thu Aug 19 04:34:58 2010
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Wed, 18 Aug 2010 22:34:58 -0400
Subject: [Rd] c.POSIXct
In-Reply-To: <AANLkTin=8k4UfBqzjQmHa9ntQP3V9zhuhsfkL_qzZyWi@mail.gmail.com>
References: <AANLkTinGcXRQd5+Xmo2ad5HoofdbzhZbEaSznAgCL3vO@mail.gmail.com>
	<AANLkTin=8k4UfBqzjQmHa9ntQP3V9zhuhsfkL_qzZyWi@mail.gmail.com>
Message-ID: <257F72DF-1C81-439A-8893-76B793C9820C@r-project.org>


On Aug 18, 2010, at 6:23 PM, Gabor Grothendieck wrote:

> 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.
> 

That's one man's opinion - from docs 

  if you want to specify an object in a particular timezone but
   to be printed in the current timezone you may want to remove the
   ?"tzone"? attribute (e.g. by ?c(x)?).

so apparently that is a design choice and hence I doubt it can be changed as it would break code that uses that feature. As many things in R whether it was a good choice is up for debate but it has been made already. (Think about how you would combine different times with different tzones - there is no "right" way to do so and thus stripping is very plausible and consistent)

Cheers,
Simon




> 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
>> 
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 



[Rd] c.POSIXct
Simon Urbanek