[Rd] Weird issue when iterating through dates

Martin Maechler maechler at stat.math.ethz.ch
Wed Aug 12 19:28:58 CEST 2015


(Resend: was meant for R-devel, not just Joshua)

> On Wed, Aug 12, 2015 at 10:55 AM, Gábor Csárdi <csardi.gabor at gmail.com> wrote:
> > I am not sure if this is a bug or not.
> >
> I would argue that this isn't a bug, not even in the documentation of
> "for" (even though it might be clearer).  ?"for" says that `seq` is
> "[A]n expression evaluating to a vector (including a list and an
> expression) or to a pairlist or 'NULL'".  Date objects aren't strictly
> vectors, so they're treated as integer/numeric.

> This answer on StackOverflow said that "for" does not copy any of the
> iterators attributes (including class), which causes this behavior.
> http://stackoverflow.com/a/23278464/271616

> To respond to the original question regarding why the code below,
> "prints the dates as a string".  Quite simply, you convert seq(d1,d2,
> by=1) to character, so it's no longer a Date.  The fact that
> Sys.Date() and as.character(Sys.Date()) both *print* the same thing
> does not mean they are the same.

> for ( dt in as.character(seq(d1,d2, by=1)) ) {
>   print(dt)
> }

> Best,
> Josh

Thank you, Joshua.  Definitely no bug ... 
but possibly something where the documentation (== the help
page, not Google, not Stackoverflow, ... ;-\ ) can be improved.

Indeed, one could add  what  
	``evaluating to a vector''
means; 
I don't have time now, but am almost sure that we could state that

      for(n in obj) { ... }

should be semantically equivalent to

      for(n in as.vector(obj)) { ... }

but there may be subtleties here....
--> posting back to R-devel  so people can experiment if the
above is true, and if not *where*.

Martin

> > Gabor
> >
> > On Wed, Aug 12, 2015 at 11:51 AM, Luca Cerone <luca.cerone at gmail.com> wrote:
> >> Following up on this, should I report a bug? can you drive me through
> >> the process?
> >>
> >> Cheers,
> >> Luca
> >>
> >> On Thu, Aug 6, 2015 at 4:55 PM, William Dunlap <wdunlap at tibco.com> wrote:
> >>>>> Just a quick question: what's the difference between  `[.Date` and
> >>>>> `[[.Date`?
> >>>>> Is it supposed to be the method for accessing the value right?
> >>>>
> >>>>For Dates and atomic vectors in general they are the same, but ...
> >>>
> >>> Even for atomic vectors with names they are not quite the same
> >>>     > c(One=1, Two=2)[[2]]
> >>>     [1] 2
> >>>     > c(One=1, Two=2)[2]
> >>>     Two
> >>>       2
> >>> (and [[ will only return 1 item, unlike [).
> >>>
> >>>
> >>> Bill Dunlap
> >>> TIBCO Software
> >>> wdunlap tibco.com
> >>>
> >>> On Thu, Aug 6, 2015 at 5:36 AM, Gábor Csárdi <csardi.gabor at gmail.com> wrote:
> >>>>
> >>>> On Thu, Aug 6, 2015 at 6:30 AM, Luca Cerone <luca.cerone at gmail.com> wrote:
> >>>> [...]
> >>>> > Just a quick question: what's the difference between  `[.Date` and
> >>>> > `[[.Date`?
> >>>> > Is it supposed to be the method for accessing the value right?
> >>>>
> >>>> For Dates and atomic vectors in general they are the same, but in
> >>>> general they are two different operators that behave differently on
> >>>> some data types. E.g. on lists [ selects a sub-list and [[ selects a
> >>>> single element.
> >>>>
> >>>> Gabor
> >>>>
> >>>> [...]

> -- 
> Joshua Ulrich  |  about.me/joshuaulrich
> FOSS Trading  |  www.fosstrading.com

> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list