From sarah.goslee at gmail.com  Tue Jan 31 21:07:06 2012
From: sarah.goslee at gmail.com (Sarah Goslee)
Date: Tue, 31 Jan 2012 15:07:06 -0500
Subject: [Rd] seq.Date bug?
In-Reply-To: <20264.18292.474587.518409@max.nulle.part>
References: <20264.18292.474587.518409@max.nulle.part>
Message-ID: <CAM_vjuk4Nc8jMGjz3_OqEXc+-p6w61v2BXKG+qQWBxu7h4Wabg@mail.gmail.com>

I was prompted to try it myself:

On Tue, Jan 31, 2012 at 2:56 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> R> seq(as.Date(Sys.Date()), by="-1 months", length=6)
> [1] "2012-01-31" "2011-12-31" "2011-12-01" "2011-10-31" "2011-10-01" "2011-08-31"
> R>
>
> Notice how October appears twice.

As does December.

> Now, date arithmetic is gruesome but the documentation for seq.Date et al
> does not hint it wouldn't honour the by= argument. ?So a bug, or merely a
> somewhat less than desirable features.

The by argument chokes on "month" if the current day is greater than the
shortest month in the sequence (presumably due to the irregular nature
of month lengths):

For leap year 2012:
> seq(as.Date("2012/1/29"), by="month", length.out=12) # works
 [1] "2012-01-29" "2012-02-29" "2012-03-29" "2012-04-29" "2012-05-29"
 [6] "2012-06-29" "2012-07-29" "2012-08-29" "2012-09-29" "2012-10-29"
[11] "2012-11-29" "2012-12-29"
> seq(as.Date("2012/1/30"), by="month", length.out=12) # fails
 [1] "2012-01-30" "2012-03-01" "2012-03-30" "2012-04-30" "2012-05-30"
 [6] "2012-06-30" "2012-07-30" "2012-08-30" "2012-09-30" "2012-10-30"
[11] "2012-11-30" "2012-12-30"

While for non-leap year 2011:
> seq(as.Date("2011/1/28"), by="month", length.out=12) # works
 [1] "2011-01-28" "2011-02-28" "2011-03-28" "2011-04-28" "2011-05-28"
 [6] "2011-06-28" "2011-07-28" "2011-08-28" "2011-09-28" "2011-10-28"
[11] "2011-11-28" "2011-12-28"
> seq(as.Date("2011/1/29"), by="month", length.out=12) #fails
 [1] "2011-01-29" "2011-03-01" "2011-03-29" "2011-04-29" "2011-05-29"
 [6] "2011-06-29" "2011-07-29" "2011-08-29" "2011-09-29" "2011-10-29"
[11] "2011-11-29" "2011-12-29"

> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-redhat-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_2.14.1



-- 
Sarah Goslee
http://www.functionaldiversity.org



[Rd] seq.Date bug?
Sarah Goslee