Dear all, I am experiencing a weird issue when iterating through dates in R (3.1.2 and 3.2.1 on 64bit linux machines) I am bit surprised about the behaviour of this snippet of code: d1 <- as.Date('2015-01-01') d2 <- as.Date('2015-01-31') for ( dt in seq(d1,d2, by=1) ) { dt <- as.character(dt) print(dt) } for ( dt in as.character(seq(d1,d2, by=1)) ) { print(dt) } I can't find a good explanation why the first for loop would convert to string the numeric interpretation of the dates while the second one correctly (at least in my intentions) prints the dates as string. I am sure that it is not a bug in R but I would like to understand why I am getting different outputs from the two for loops. Thanks a lot in advance for your help! Cheers, Luca
Date has a `[.Date` method and also `[[.Date`, but it looks like a for loop does not consider the class of the object you are iterating over, so these are ignored and the internal representation is used. I think this is a bug, at least in the documentation of ?"for". Interestingly, lapply and co. do consider the class: invisible(lapply(seq(d1, d2, by = 1), print)) works as you would expect. (The invisible() is to suppress printing the return value.) Gabor On Thu, Aug 6, 2015 at 3:24 AM, Luca Cerone <luca.cerone at gmail.com> wrote:> Dear all, > I am experiencing a weird issue when iterating through dates in R > (3.1.2 and 3.2.1 on 64bit linux machines) > > I am bit surprised about the behaviour of this snippet of code: > > d1 <- as.Date('2015-01-01') > d2 <- as.Date('2015-01-31') > > for ( dt in seq(d1,d2, by=1) ) { > dt <- as.character(dt) > print(dt) > } > > for ( dt in as.character(seq(d1,d2, by=1)) ) { > print(dt) > } > > I can't find a good explanation why the first for loop would convert > to string the numeric interpretation > of the dates while the second one correctly (at least in my > intentions) prints the dates as string. > > I am sure that it is not a bug in R but I would like to understand why > I am getting different outputs from the two for loops. > > Thanks a lot in advance for your help! > > Cheers, > Luca > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Thanks G?bor, I thought there was some mistake in my logic on how casting works in R and wanted to be sure. Just a quick question: what's the difference between `[.Date` and `[[.Date`? Is it supposed to be the method for accessing the value right? Thanks again for your help, Cheers, Luca On Thu, Aug 6, 2015 at 10:10 AM, G?bor Cs?rdi <csardi.gabor at gmail.com> wrote:> Date has a `[.Date` method and also `[[.Date`, but it looks like a for > loop does not consider the class of the object you are iterating over, > so these are ignored and the internal representation is used. > > I think this is a bug, at least in the documentation of ?"for". > > Interestingly, lapply and co. do consider the class: > > invisible(lapply(seq(d1, d2, by = 1), print)) > > works as you would expect. (The invisible() is to suppress printing > the return value.) > > Gabor > > On Thu, Aug 6, 2015 at 3:24 AM, Luca Cerone <luca.cerone at gmail.com> wrote: >> Dear all, >> I am experiencing a weird issue when iterating through dates in R >> (3.1.2 and 3.2.1 on 64bit linux machines) >> >> I am bit surprised about the behaviour of this snippet of code: >> >> d1 <- as.Date('2015-01-01') >> d2 <- as.Date('2015-01-31') >> >> for ( dt in seq(d1,d2, by=1) ) { >> dt <- as.character(dt) >> print(dt) >> } >> >> for ( dt in as.character(seq(d1,d2, by=1)) ) { >> print(dt) >> } >> >> I can't find a good explanation why the first for loop would convert >> to string the numeric interpretation >> of the dates while the second one correctly (at least in my >> intentions) prints the dates as string. >> >> I am sure that it is not a bug in R but I would like to understand why >> I am getting different outputs from the two for loops. >> >> Thanks a lot in advance for your help! >> >> Cheers, >> Luca >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel