From lgautier at gmail.com  Sun Aug  9 21:45:07 2009
From: lgautier at gmail.com (laurent)
Date: Sun, 09 Aug 2009 21:45:07 +0200
Subject: [Rd] Why is strptime always returning a vector of length 9 ?
In-Reply-To: <e8e755250908090945v55c10432xda597826452b301f@mail.gmail.com>
References: <1249827638.4877.15.camel@hot-spring>
	<971536df0908090835i3b6048a5h961920de644278cb@mail.gmail.com>
	<e8e755250908090945v55c10432xda597826452b301f@mail.gmail.com>
Message-ID: <1249847107.6040.23.camel@hot-spring>

Thanks.

It seems that the source of my confusion comes from using first using
str() (and then once on the wrong track, it is easier to miss the
information a man page that also describes POSIXct that is itself a
vector of length equal to the number of entries it contains).

With the current example:
> str(xd)
 POSIXlt[1:9], format: "2007-03-09" "2007-05-31" "2008-11-12"
"2008-11-12" ...

A quick inspection of the output does indicate a something with nine
elements, but the elements appear to be "2007-03-09", "2007-05-31",
etc... possibly creating confusion.

To make it even more confusing I have:
> x[1]
[1] "March 09, 2007"
> str(x[1])
 chr "March 09, 2007"

For what it is worth, I think that the behavior of the extract operator
"[" (defined as a S3 method "[.POSIXlt()") is inconsistent with the
output of length() (default method for lists).


L.




On Sun, 2009-08-09 at 11:45 -0500, Jeff Ryan wrote:
> The reason is in the ?strptime under value:
> 
> 'strptime' turns character representations into an object of class
>      '"POSIXlt"'.  The timezone is used to set the 'isdst' component
>      and to set the '"tzone"' attribute if 'tz != ""'.
> 
> And POSIXlt is a list of length 9.
> 
> 
> HTH
> Jeff
> 
> On Sun, Aug 9, 2009 at 10:35 AM, Gabor
> Grothendieck<ggrothendieck at gmail.com> wrote:
> > Try this to see its components:
> >
> >> str(unclass(xd))
> > List of 9
> >  $ sec  : num [1:6] 0 0 0 0 0 0
> >  $ min  : int [1:6] 0 0 0 0 0 0
> >  $ hour : int [1:6] 0 0 0 0 0 0
> >  $ mday : int [1:6] 9 31 12 12 30 30
> >  $ mon  : int [1:6] 2 4 10 10 6 6
> >  $ year : int [1:6] 107 107 108 108 109 109
> >  $ wday : int [1:6] 5 4 3 3 4 4
> >  $ yday : int [1:6] 67 150 316 316 210 210
> >  $ isdst: int [1:6] 0 1 0 0 1 1
> >
> > and read R News 4/1 for more.
> >
> > On Sun, Aug 9, 2009 at 10:20 AM, laurent<lgautier at gmail.com> wrote:
> >> Dear List,
> >>
> >>
> >> I am having an issue with strptime (see below).
> >> I can reproduce it on R-2.8, R-2.9, and R-2.10-dev, I tempted to see
> >> either a bug or my misunderstanding (and then I just don't currently see
> >> where).
> >>
> >> # setup:
> >> x <- c("March 09, 2007", "May 31, 2007", "November 12, 2008", "November
> >> 12, 2008", "July 30, 2009", "July 30, 2009" )
> >>
> >> # showing the problem
> >>> length(x)
> >> 6
> >>> xd <- strptime(x, format = "%B %d, %Y")
> >>> length(xd)
> >> 9
> >>> xd[1:9]
> >> [1] "2007-03-09" "2007-05-31" "2008-11-12" "2008-11-12" "2009-07-30"
> >> [6] "2009-07-30" NA           NA           NA
> >>> length(strptime(rep(x, 2), format="%B %d, %Y"))
> >> [1] 9
> >>> strptime(rep(x, 2), format="%B %d, %Y")[1:12]
> >>  [1] "2007-03-09" "2007-05-31" "2008-11-12" "2008-11-12" "2009-07-30"
> >>  [6] "2009-07-30" "2007-03-09" "2007-05-31" "2008-11-12" "2008-11-12"
> >> [11] "2009-07-30" "2009-07-30
> >>
> >> Any pointer would be appreciated.
> >>
> >>
> >>
> >> L.
> >>
> >> ______________________________________________
> >> R-devel at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> >
> 
> 
>



[Rd] Why is strptime always returning a vector of length 9 ?
laurent