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.
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"