Summary: For certain well formed inputs, cut.POSIXt will give an error. Example: cut(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "1 day") Example output: Error in seq.int(0, to - from, by) : 'to' must be finite Patch to fix error: This patch is for src/library/base/R/datetime.R Index: datetime.R ==================================================================--- datetime.R (revision 51110) +++ 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) Discussion/description: The bug is triggered when the (earliest) date/time given to cut.POSIXt falls on the day transitioning from daylight savings time to standard time, but at a time after the switchover. In the US, November 1, 2009 was such a day. In cut.POSIXt(), the elements of a POSIXlt representation of the starting date/time are directly manipulated to set it to the start of the day (since a day sized spacing was requested). This puts it before the daylight savings time to standard time switchover. When as.POSIXct is later called on this object, it returns NA which causes the returned error when the NA is passed as an argument to seq.int(). The motivation for the patch is the trunc.POSIXt function in the same file. It correctly handles this case: trunc(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "day") # [1] "2009-11-01 America/Los_Angeles" as.POSIXct(trunc(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "day")) # [1] "2009-11-01 PDT" In that function, when truncating to days, the isdst element of the POSIXlt is set to -1L. That is the modification to cut.POSIXt() that I made. -- Brian Diggs, Ph.D. Senior Research Associate, Department of Surgery, Oregon Health & Science University --please do not edit the information below-- Version: platform = i386-pc-mingw32 arch = i386 os = mingw32 system = i386, mingw32 status = major = 2 minor = 10.1 year = 2009 month = 12 day = 14 svn rev = 50720 language = R version.string = R version 2.10.1 (2009-12-14) Windows XP (build 2600) Service Pack 3 Locale: LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252 Search Path: .GlobalEnv, package:stats, package:graphics, package:grDevices, package:utils, package:datasets, package:methods, Autoloads, package:base
I do not know why my bug report got so oddly encoded, I've reproduced it; hopefully it won't get mangled again. Summary: For certain well formed inputs, cut.POSIXt will give an error. Example: cut(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "1 day") Example output: Error in seq.int(0, to - from, by) : 'to' must be finite Patch to fix error: This patch is for src/library/base/R/datetime.R Index: datetime.R ==================================================================--- datetime.R (revision 51110) +++ 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) Discussion: The bug is triggered when the (earliest) date/time given to cut.POSIXt falls on the day transitioning from daylight savings time to standard time, but at a time after the switchover. In the US, November 1, 2009 was such a day. In cut.POSIXt(), the elements of a POSIXlt representation of the date/time are directly manipulated to set it to the start of the day (since a day sized spacing was requested). This puts it before the daylight savings time to standard time switchover. When as.POSIXct is later called on this object, it returns NA which causes the returned error when the NA is passed as an argument to seq.int(). The motivation for the patch is the trunc.POSIXt function in the same file. It correctly handles this case: trunc(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "day") # [1] "2009-11-01 America/Los_Angeles" as.POSIXct(trunc(as.POSIXct("2009-11-01 04:00:00", tz="America/Los_Angeles"), "day")) # [1] "2009-11-01 PDT" In that function, when truncating to days, the isdst element of the POSIXlt is set to -1L. That is the modification to cut.POSIXt() that I made. --please do not edit the information below-- Version: platform = i386-pc-mingw32 arch = i386 os = mingw32 system = i386, mingw32 status = major = 2 minor = 10.1 year = 2009 month = 12 day = 14 svn rev = 50720 language = R version.string = R version 2.10.1 (2009-12-14) Windows XP (build 2600) Service Pack 3 Locale: LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252 Search Path: .GlobalEnv, package:stats, package:graphics, package:grDevices, package:utils, package:datasets, package:methods, Autoloads, package:base On 2/8/2010 11:30 AM, diggsb@ohsu.edu wrote:> U3VtbWFyeToNCg0KRm9yIGNlcnRhaW4gd2VsbCBmb3JtZWQgaW5wdXRzLCBjdXQuUE9TSVh0IHdp > bGwgZ2l2ZSBhbiBlcnJvci4NCg0KRXhhbXBsZToNCg0KY3V0KGFzLlBPU0lYY3QoIjIwMDktMTEt > MDEgMDQ6MDA6MDAiLCB0ej0iQW1lcmljYS9Mb3NfQW5nZWxlcyIpLCAiMSBkYXkiKQ0KDQpFeGFt > cGxlIG91dHB1dDoNCg0KRXJyb3IgaW4gc2VxLmludCgwLCB0byAtIGZyb20sIGJ5KSA6ICd0bycg > bXVzdCBiZSBmaW5pdGUNCg0KUGF0Y2ggdG8gZml4IGVycm9yOg0KDQpUaGlzIHBhdGNoIGlzIGZv > ciBzcmMvbGlicmFyeS9iYXNlL1IvZGF0ZXRpbWUuUg0KDQpJbmRleDogZGF0ZXRpbWUuUg0KPT09 > PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 > PT09PT09PQ0KLS0tIGRhdGV0aW1lLlIJKHJldmlzaW9uIDUxMTEwKQ0KKysrIGRhdGV0aW1lLlIJ > KHdvcmtpbmcgY29weSkNCkBAIC03MjksNyArNzI5LDcgQEANCiAJaW5jciA8LSAxDQogCWlmKHZh > bGlkID4gMUwpIHsgc3RhcnQkc2VjIDwtIDBMOyBpbmNyIDwtIDU5Ljk5IH0NCiAJaWYodmFsaWQg > PiAyTCkgeyBzdGFydCRtaW4gPC0gMEw7IGluY3IgPC0gMzYwMCAtIDEgfQ0KLQlpZih2YWxpZCA+ > IDNMKSB7IHN0YXJ0JGhvdXIgPC0gMEw7IGluY3IgPC0gODY0MDAgLSAxIH0NCisJaWYodmFsaWQg > PiAzTCkgeyBzdGFydCRob3VyIDwtIDBMOyBzdGFydCRpc2RzdCA8LSAtMUw7IGluY3IgPC0gODY0 > MDAgLSAxIH0NCiAJaWYodmFsaWQgPT0gNUwpIHsgIyB3ZWVrcw0KIAkgICAgc3RhcnQkbWRheSA8 > LSBzdGFydCRtZGF5IC0gc3RhcnQkd2RheQ0KIAkgICAgaWYoc3RhcnQub24ubW9uZGF5KQ0KDQpE > aXNjdXNzaW9uL2Rlc2NyaXB0aW9uOg0KDQpUaGUgYnVnIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSAo > ZWFybGllc3QpIGRhdGUvdGltZSBnaXZlbiB0byBjdXQuUE9TSVh0IA0KZmFsbHMgb24gdGhlIGRh > eSB0cmFuc2l0aW9uaW5nIGZyb20gZGF5bGlnaHQgc2F2aW5ncyB0aW1lIHRvIHN0YW5kYXJkIA0K > dGltZSwgYnV0IGF0IGEgdGltZSBhZnRlciB0aGUgc3dpdGNob3Zlci4gIEluIHRoZSBVUywgTm92 > ZW1iZXIgMSwgMjAwOSB3YXMNCnN1Y2ggYSBkYXkuDQoNCkluIGN1dC5QT1NJWHQoKSwgdGhlIGVs > ZW1lbnRzIG9mIGEgUE9TSVhsdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhcnRpbmcgDQpkYXRl > L3RpbWUgYXJlIGRpcmVjdGx5IG1hbmlwdWxhdGVkIHRvIHNldCBpdCB0byB0aGUgc3RhcnQgb2Yg > dGhlIGRheSANCihzaW5jZSBhIGRheSBzaXplZCBzcGFjaW5nIHdhcyByZXF1ZXN0ZWQpLiAgVGhp > cyBwdXRzIGl0IGJlZm9yZSB0aGUgZGF5bGlnaHQgDQpzYXZpbmdzIHRpbWUgdG8gc3RhbmRhcmQg > dGltZSBzd2l0Y2hvdmVyLiAgV2hlbiBhcy5QT1NJWGN0IGlzIGxhdGVyIGNhbGxlZCANCm9uIHRo > aXMgb2JqZWN0LCBpdCByZXR1cm5zIE5BIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgZXJyb3Ig > d2hlbiB0aGUgTkEgDQppcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gc2VxLmludCgpLg0KDQpU > aGUgbW90aXZhdGlvbiBmb3IgdGhlIHBhdGNoIGlzIHRoZSB0cnVuYy5QT1NJWHQgZnVuY3Rpb24g > aW4gdGhlIHNhbWUgDQpmaWxlLiAgSXQgY29ycmVjdGx5IGhhbmRsZXMgdGhpcyBjYXNlOg0KDQp0 > cnVuYyhhcy5QT1NJWGN0KCIyMDA5LTExLTAxIDA0OjAwOjAwIiwgdHo9IkFtZXJpY2EvTG9zX0Fu > Z2VsZXMiKSwgImRheSIpDQojIFsxXSAiMjAwOS0xMS0wMSBBbWVyaWNhL0xvc19BbmdlbGVzIg0K > YXMuUE9TSVhjdCh0cnVuYyhhcy5QT1NJWGN0KCIyMDA5LTExLTAxIDA0OjAwOjAwIiwgdHo9IkFt > ZXJpY2EvTG9zX0FuZ2VsZXMiKSwgImRheSIpKQ0KIyBbMV0gIjIwMDktMTEtMDEgUERUIg0KDQpJ > biB0aGF0IGZ1bmN0aW9uLCB3aGVuIHRydW5jYXRpbmcgdG8gZGF5cywgdGhlIGlzZHN0IGVsZW1l > bnQgb2YgdGhlIFBPU0lYbHQNCmlzIHNldCB0byAtMUwuICBUaGF0IGlzIHRoZSBtb2RpZmljYXRp > b24gdG8gY3V0LlBPU0lYdCgpIHRoYXQgSSBtYWRlLg0KDQotLQ0KQnJpYW4gRGlnZ3MsIFBoLkQu > DQpTZW5pb3IgUmVzZWFyY2ggQXNzb2NpYXRlLCBEZXBhcnRtZW50IG9mIFN1cmdlcnksIE9yZWdv > biBIZWFsdGggJiBTY2llbmNlIFVuaXZlcnNpdHkNCg0KLS1wbGVhc2UgZG8gbm90IGVkaXQgdGhl > IGluZm9ybWF0aW9uIGJlbG93LS0NCg0KVmVyc2lvbjoNCiBwbGF0Zm9ybSA9IGkzODYtcGMtbWlu > Z3czMg0KIGFyY2ggPSBpMzg2DQogb3MgPSBtaW5ndzMyDQogc3lzdGVtID0gaTM4NiwgbWluZ3cz > Mg0KIHN0YXR1cyA9IA0KIG1ham9yID0gMg0KIG1pbm9yID0gMTAuMQ0KIHllYXIgPSAyMDA5DQog > bW9udGggPSAxMg0KIGRheSA9IDE0DQogc3ZuIHJldiA9IDUwNzIwDQogbGFuZ3VhZ2UgPSBSDQog > dmVyc2lvbi5zdHJpbmcgPSBSIHZlcnNpb24gMi4xMC4xICgyMDA5LTEyLTE0KQ0KDQpXaW5kb3dz > IFhQIChidWlsZCAyNjAwKSBTZXJ2aWNlIFBhY2sgMw0KDQpMb2NhbGU6DQpMQ19DT0xMQVRFPUVu > Z2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyO0xDX0NUWVBFPUVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4x > MjUyO0xDX01PTkVUQVJZPUVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyO0xDX05VTUVSSUM9QztM > Q19USU1FPUVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyDQoNClNlYXJjaCBQYXRoOg0KIC5HbG9i > YWxFbnYsIHBhY2thZ2U6c3RhdHMsIHBhY2thZ2U6Z3JhcGhpY3MsIHBhY2thZ2U6Z3JEZXZpY2Vz > LCBwYWNrYWdlOnV0aWxzLCBwYWNrYWdlOmRhdGFzZXRzLCBwYWNrYWdlOm1ldGhvZHMsIEF1dG9s > b2FkcywgcGFja2FnZTpiYXNlDQoNCg0KDQo>