Oh OK, missed that. Here is a solution using base: (already posted)
I didn't sort out the issue in my email below but here is a (not very R'ish) solution: > pm = function(x) { + for(i in 1:7){ + if(format(as.Date(Sys.Date()- i),'%w') == 1){ + d = Sys.Date() - i; + } + } + d + } > pm(Sys.Date()) [1] "2011-08-29" On Fri, Sep 2, 2011 at 9:59 AM, Marc Schwartz <marc_schwa...@me.com> wrote: > On Sep 2, 2011, at 10:35 AM, Ben qant wrote: > > > Hello, > > > > I'm attempting to return the date (in form '%Y-%m-%d') of the Monday > > previous to the current date. For example: since it is 2011-09-02 today, > I > > would expect 2011-08-29 to be the return value. > > > > I found the following in: > > http://www.mail-archive.com/r-help@r-project.org/msg144184.html > > > > Start quote from link: > > prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4) > > > > For example, > > > >> prevmonday(Sys.Date()) > > [1] "2011-08-15" > >> prevmonday(prevmonday(Sys.Date())) > > [1] "2011-08-15" > > > > End quote from link. > > > > But when I do it I get: > >> prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + > as.Date(1-4) > >> prevmonday(Sys.Date()) > > Error in as.Date.numeric(1 - 4) : 'origin' must be supplied > > > > I've tried setting the 'origin' argument in as.Date() in different ways, > but > > it returns inaccurate results. > > > > Thanks, > > > > Ben > > > If memory serves, this is because Gabor used the version of as.Date() from > his 'zoo' package in that post, which does not require an origin to be > specified, whereas the default as.Date() function in R's base package does: > > prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4) > > > prevmonday(Sys.Date()) > Error in as.Date.numeric(1 - 4) : 'origin' must be supplied > > > require(zoo) > Loading required package: zoo > > Attaching package: 'zoo' > > The following object(s) are masked from 'package:base': > > as.Date > > > prevmonday(Sys.Date()) > [1] "2011-08-29" > > > # Remove 'zoo' to use the base function > detach(package:zoo) > > > prevmonday(Sys.Date()) > Error in as.Date.numeric(1 - 4) : 'origin' must be supplied > > > # Fix the function to use base::as.Date() > prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4, > origin = "1970-01-01") > > > prevmonday(Sys.Date()) > [1] "2011-08-29" > > > See ?as.Date > > HTH, > > Marc Schwartz > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.