I'm still not clear about whether this is a bug in foreach. Should c.Date be invoked by foreach with .combine='c'? On 11/06/2016 07:02 PM, William Dunlap wrote: Note that in the OP's example c.Date is never invoked. c.Date is called if .combine calls c rather than if .combine is c:> library(zoo) > trace(c.Date, quote(print(sys.call())))Tracing function "c.Date" in package "base" [1] "c.Date"> foreach(i=10000:10003, .combine=c) %do% { as.Date(i) }[1] 10000 10001 10002 10003> foreach(i=10000:10003, .combine=function(...)c(...)) %do% { as.Date(i) }Tracing c.Date(...) on entry eval(expr, envir, enclos) Tracing c.Date(...) on entry eval(expr, envir, enclos) Tracing c.Date(...) on entry eval(expr, envir, enclos) [1] "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22" Bill Dunlap TIBCO Software wdunlap tibco.com<http://tibco.com> On Sun, Nov 6, 2016 at 2:20 PM, Duncan Murdoch <murdoch.duncan at gmail.com<mailto:murdoch.duncan at gmail.com>> wrote: On 06/11/2016 5:02 PM, Jim Lemon wrote: hi James, I think you have to have a starting date ("origin") for as.Date to convert numbers to dates. That's true with the function in the base package, but the zoo package also has an as.Date() function, which defaults the origin to "1970-01-01". If James is using zoo his code would be okay. If he's not, he would have got an error, so I think he must have been. Duncan Murdoch Jim On Sun, Nov 6, 2016 at 12:10 PM, James Hirschorn <james.hirschorn at hotmail.com<mailto:james.hirschorn at hotmail.com>> wrote: This seemed odd so I wanted to check: > x <- foreach(i=10000:10100, .combine='c') %do% { as.Date(i) } yields a numeric vector for x: > class(x) [1] "numeric" Should it not be a vector of Date? ______________________________________________ R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]]
It looks like a bug. I don't think c.Date() is every called, because:> trace(c.Date, tracer = quote(message("c.Date() called")))Tracing function "c.Date" in package "base" [1] "c.Date" Tracing works:> c(as.Date(10000L), as.Date(10001L))Tracing c.Date(as.Date(10000L), as.Date(10001L)) on entry c.Date() called [1] "1997-05-19" "1997-05-20" but c.Date() is not called here:> x <- foreach(i=10000:10100, .combine = function(...) c(...)) %do% { as.Date(i) } > str(x)num [1:101] 10000 10001 10002 10003 10004 ... The following hack works:> library("foreach") > library("zoo") > x <- foreach(i=10000:10100, .combine = function(...) c(...)) %do% { as.Date(i) } > str(x)Date[1:101], format: "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22" ... Alternatively, one can use append() which works like c() if no other arguments are specified:> x <- foreach(i=10000:10100, .combine = append) %do% { as.Date(i) } > str(x)Date[1:101], format: "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22" ... It looks like foreach is treating the .combine = c case specially and someone fail to properly dispatch c() on the object (or something). /Henrik On Sun, Nov 13, 2016 at 7:14 AM, James Hirschorn <james.hirschorn at hotmail.com> wrote:> I'm still not clear about whether this is a bug in foreach. Should c.Date be invoked by foreach with .combine='c'? > > On 11/06/2016 07:02 PM, William Dunlap wrote: > Note that in the OP's example c.Date is never invoked. c.Date is called if .combine > calls c rather than if .combine is c: > >> library(zoo) >> trace(c.Date, quote(print(sys.call()))) > Tracing function "c.Date" in package "base" > [1] "c.Date" >> foreach(i=10000:10003, .combine=c) %do% { as.Date(i) } > [1] 10000 10001 10002 10003 >> foreach(i=10000:10003, .combine=function(...)c(...)) %do% { as.Date(i) } > Tracing c.Date(...) on entry > eval(expr, envir, enclos) > Tracing c.Date(...) on entry > eval(expr, envir, enclos) > Tracing c.Date(...) on entry > eval(expr, envir, enclos) > [1] "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22" > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com<http://tibco.com> > > On Sun, Nov 6, 2016 at 2:20 PM, Duncan Murdoch <murdoch.duncan at gmail.com<mailto:murdoch.duncan at gmail.com>> wrote: > On 06/11/2016 5:02 PM, Jim Lemon wrote: > hi James, > I think you have to have a starting date ("origin") for as.Date to > convert numbers to dates. > > That's true with the function in the base package, but the zoo package also has an as.Date() function, which defaults the origin to "1970-01-01". If James is using zoo his code would be okay. If he's not, he would have got an error, so I think he must have been. > > Duncan Murdoch > > > > Jim > > On Sun, Nov 6, 2016 at 12:10 PM, James Hirschorn > <james.hirschorn at hotmail.com<mailto:james.hirschorn at hotmail.com>> wrote: > This seemed odd so I wanted to check: > > > x <- foreach(i=10000:10100, .combine='c') %do% { as.Date(i) } > > yields a numeric vector for x: > > > class(x) > [1] "numeric" > > Should it not be a vector of Date? > > ______________________________________________ > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > > ______________________________________________ > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
On Nov 13, 2016 13:54, "Henrik Bengtsson" <henrik.bengtsson at gmail.com> wrote:> > It looks like a bug. I don't think c.Date() is every called, because: > > > trace(c.Date, tracer = quote(message("c.Date() called"))) > Tracing function "c.Date" in package "base" > [1] "c.Date" > > Tracing works: > > > c(as.Date(10000L), as.Date(10001L)) > Tracing c.Date(as.Date(10000L), as.Date(10001L)) on entry > c.Date() called > [1] "1997-05-19" "1997-05-20" > > but c.Date() is not called here: > > > x <- foreach(i=10000:10100, .combine = function(...) c(...)) %do% {as.Date(i) }> > str(x) > num [1:101] 10000 10001 10002 10003 10004 ...Cut'n'paste error above. It is x <- foreach(i=10000:10100, .combine = "c") %do% { as.Date(i) } that doesn't call c.Date(). Same if you try with .combine = c.> > > The following hack works: > > > library("foreach") > > library("zoo") > > x <- foreach(i=10000:10100, .combine = function(...) c(...)) %do% {as.Date(i) }> > str(x) > Date[1:101], format: "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22"...> > Alternatively, one can use append() which works like c() if no other > arguments are specified: > > > x <- foreach(i=10000:10100, .combine = append) %do% { as.Date(i) } > > str(x) > Date[1:101], format: "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22"...> > It looks like foreach is treating the .combine = c case specially and > someone fail to properly dispatch c() on the object (or something). > > /Henrik > > > On Sun, Nov 13, 2016 at 7:14 AM, James Hirschorn > <james.hirschorn at hotmail.com> wrote: > > I'm still not clear about whether this is a bug in foreach. Shouldc.Date be invoked by foreach with .combine='c'?> > > > On 11/06/2016 07:02 PM, William Dunlap wrote: > > Note that in the OP's example c.Date is never invoked. c.Date iscalled if .combine> > calls c rather than if .combine is c: > > > >> library(zoo) > >> trace(c.Date, quote(print(sys.call()))) > > Tracing function "c.Date" in package "base" > > [1] "c.Date" > >> foreach(i=10000:10003, .combine=c) %do% { as.Date(i) } > > [1] 10000 10001 10002 10003 > >> foreach(i=10000:10003, .combine=function(...)c(...)) %do% { as.Date(i)}> > Tracing c.Date(...) on entry > > eval(expr, envir, enclos) > > Tracing c.Date(...) on entry > > eval(expr, envir, enclos) > > Tracing c.Date(...) on entry > > eval(expr, envir, enclos) > > [1] "1997-05-19" "1997-05-20" "1997-05-21" "1997-05-22" > > > > > > Bill Dunlap > > TIBCO Software > > wdunlap tibco.com<http://tibco.com> > > > > On Sun, Nov 6, 2016 at 2:20 PM, Duncan Murdoch <murdoch.duncan at gmail.com<mailto:murdoch.duncan at gmail.com>> wrote:> > On 06/11/2016 5:02 PM, Jim Lemon wrote: > > hi James, > > I think you have to have a starting date ("origin") for as.Date to > > convert numbers to dates. > > > > That's true with the function in the base package, but the zoo packagealso has an as.Date() function, which defaults the origin to "1970-01-01". If James is using zoo his code would be okay. If he's not, he would have got an error, so I think he must have been.> > > > Duncan Murdoch > > > > > > > > Jim > > > > On Sun, Nov 6, 2016 at 12:10 PM, James Hirschorn > > <james.hirschorn at hotmail.com<mailto:james.hirschorn at hotmail.com>> wrote: > > This seemed odd so I wanted to check: > > > > > x <- foreach(i=10000:10100, .combine='c') %do% { as.Date(i) } > > > > yields a numeric vector for x: > > > > > class(x) > > [1] "numeric" > > > > Should it not be a vector of Date? > > > > ______________________________________________ > > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- ToUNSUBSCRIBE and more, see> > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > > > ______________________________________________ > > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- ToUNSUBSCRIBE and more, see> > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > > > > > ______________________________________________ > > R-help at r-project.org<mailto:R-help at r-project.org> mailing list -- ToUNSUBSCRIBE and more, see> > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. > > > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code.Henrik [[alternative HTML version deleted]]