I've checked the archives, and this problem crops up every few months going back for years.
What I was not able to find was an explanation of why a function such as length.POSIXlt <- function(x) { length(x$sec) } is a Bad Idea, or what it would break. listserv threads seem to end without presenting an answer. R News 2001 Vol 1/2 discusses that "lots of methods are needed..." (page 11) but I haven't found discussion of why a length method isn't feasible. Can anyone clarify this, or point me at the right archive or documentation source that discusses why objects of class POSIXlt always need to return a length of 9? Thanks Steve McKinney > -----Original Message----- > From: r-devel-boun...@r-project.org [mailto:r-devel-boun...@r- > project.org] On Behalf Of Benilton Carvalho > Sent: Thursday, November 19, 2009 4:29 PM > To: m...@celos.net > Cc: r-de...@stat.math.ethz.ch > Subject: Re: [Rd] Surprising length() of POSIXlt vector (PR#14073) > > Check the documentation and the archives. Not a bug. b > > On Nov 19, 2009, at 8:30 PM, m...@celos.net wrote: > > > Arrays of POSIXlt dates always return a length of 9. This > > is correct (they're really lists of vectors of seconds, > > hours, and so forth), but other methods disguise them as > > flat vectors, giving superficially surprising behaviour: > > > > strings <- paste('2009-1-', 1:31, sep='') > > dates <- strptime(strings, format="%Y-%m-%d") > > > > print(dates) > > # [1] "2009-01-01" "2009-01-02" "2009-01-03" "2009-01-04" > > "2009-01-05" > > # [6] "2009-01-06" "2009-01-07" "2009-01-08" "2009-01-09" > > "2009-01-10" > > # [11] "2009-01-11" "2009-01-12" "2009-01-13" "2009-01-14" > > "2009-01-15" > > # [16] "2009-01-16" "2009-01-17" "2009-01-18" "2009-01-19" > > "2009-01-20" > > # [21] "2009-01-21" "2009-01-22" "2009-01-23" "2009-01-24" > > "2009-01-25" > > # [26] "2009-01-26" "2009-01-27" "2009-01-28" "2009-01-29" > > "2009-01-30" > > # [31] "2009-01-31" > > > > print(length(dates)) > > # [1] 9 > > > > str(dates) > > # POSIXlt[1:9], format: "2009-01-01" "2009-01-02" "2009-01-03" > > "2009-01-04" ... > > > > print(dates[20]) > > # [1] "2009-01-20" > > > > print(length(dates[20])) > > # [1] 9 > > > > I've since realised that POSIXct makes date vectors easier, > > but could we also have something like: > > > > length.POSIXlt <- function(x) { length(x$sec) } > > > > in datetime.R, to avoid breaking functions (like the > > str.POSIXt method) which use length() in this way? > > > > Thanks, > > Mark <>< > > > > ------ > > > > Version: > > platform = i686-pc-linux-gnu > > arch = i686 > > os = linux-gnu > > system = i686, linux-gnu > > status = > > major = 2 > > minor = 10.0 > > year = 2009 > > month = 10 > > day = 26 > > svn rev = 50208 > > language = R > > version.string = R version 2.10.0 (2009-10-26) > > > > Locale: > > C > > > > Search Path: > > .GlobalEnv, package:stats, package:graphics, package:grDevices, > > package:utils, package:datasets, package:methods, Autoloads, > > package:base > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel