On 2/3/2010 7:48 AM, Brian Diggs wrote: > On 2/1/2010 3:57 PM, Brian Diggs wrote: >> The following code: >> >> cut(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "1 day") >> >> gives the error: >> >> Error in seq.int(0, to - from, by) : 'to' must be finite
[details deleted...] >> Is there a timezone/daylight savings time safe way to get to the >> beginning of the day in cut.POSIXt so that invalid dates are not sent >> to the other functions? Alternatively, can as.POSIXct.POSIXlt be >> made to handle these manually manipulated dates correctly? > > I realized I forgot my session info: > >> sessionInfo() > R version 2.10.1 (2009-12-14) > i386-pc-mingw32 > > locale: > [1] LC_COLLATE=English_United States.1252 > [2] LC_CTYPE=English_United States.1252 > [3] LC_MONETARY=English_United States.1252 > [4] LC_NUMERIC=C > [5] LC_TIME=English_United States.1252 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > >> -- Brian Diggs, Ph.D. Senior Research Associate, Department of >> Surgery, Oregon Health & Science University > A post by Felix Andrews in a different thread pointed out the trunc.POSIXt function. I checked, and it properly handles the daylight savings time issue: tm <- as.POSIXlt("2009-11-01 04:00:00", tz="America/Los_Angeles") tm <- trunc(tm, "days") as.POSIXct(tm) # [1] "2009-11-01 PDT" Looking at how trunc.POSIXt does this, I created a patch (included below) for cut.POSIXt so that it won't break either. I've not extensively tested this patch (I don't have the R build environment for Windows installed on my machine), but being analogous to existing base code, it should work generally. Index: datetime.R =================================================================== --- datetime.R (revision 51101) +++ datetime.R (working copy) @@ -729,7 +729,7 @@ incr <- 1 if(valid > 1L) { start$sec <- 0L; incr <- 59.99 } if(valid > 2L) { start$min <- 0L; incr <- 3600 - 1 } - if(valid > 3L) { start$hour <- 0L; incr <- 86400 - 1 } + if(valid > 3L) { start$hour <- 0L; start$isdst <- -1L; incr <- 86400 - 1 } if(valid == 5L) { # weeks start$mday <- start$mday - start$wday if(start.on.monday) ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel