[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