From bolker at ufl.edu  Sun Jun 25 22:32:53 2006
From: bolker at ufl.edu (Ben Bolker)
Date: Sun, 25 Jun 2006 16:32:53 -0400
Subject: [Rd] Ops.Date: promote characters to Dates?
In-Reply-To: <971536df0606240823l14bfbd4mc1db38af7d23685f@mail.gmail.com>
References: <loom.20060624T165439-818@post.gmane.org>
	<971536df0606240823l14bfbd4mc1db38af7d23685f@mail.gmail.com>
Message-ID: <449EF2F5.3010902@ufl.edu>


    Believe it or not, it works either way: I haven't fully
figured out the logic yet (except to note that I had the
logic reversed below):


Ops.Date  <- function (e1, e2)
  {
    if (nargs() == 1)
         stop("unary ", .Generic, " not defined for Date objects")
     boolean <- switch(.Generic, "<" = , ">" = , "==" = , "!=" = ,
         "<=" = , ">=" = TRUE, FALSE)
     if (!boolean)
         stop(.Generic, " not defined for Date objects")
     if (nchar(e1)) e1 <- as.Date(e1)
     if (nchar(e2)) e2 <- as.Date(e2)
     NextMethod(.Generic)
}


datechar1 = "1999-12-03"
datechar2 = "2000-12-07"
date1 = as.Date(datechar1)
date2 = as.Date(datechar2)

date1 == datechar1
datechar1 == date1

datechar1 < date2
date2 > datechar1

    I also propose

as.Date.numeric <- function(x, ...) {
    class(x) <- "Date"
    x
}

   this takes a number of seconds since 1970 and
converts it into a Date object ...

    cheers
      Ben


Gabor Grothendieck wrote:
> Note that the first argument still cannot be character
> since Ops.Date won't get dispatched in that case.
> 
> On 6/24/06, Ben Bolker <bolker at ufl.edu> wrote:
>>  Ops.Date  <- function (e1, e2)
>> {
>>    if (nargs() == 1)
>>        stop("unary ", .Generic, " not defined for Date objects")
>>    boolean <- switch(.Generic, "<" = , ">" = , "==" = , "!=" = ,
>>        "<=" = , ">=" = TRUE, FALSE)
>>    if (!boolean)
>>        stop(.Generic, " not defined for Date objects")
>> +    if (!nchar(e1)) e1 <- as.Date(e1)
>> +    if (!nchar(e2)) e2 <- as.Date(e2)
>>    NextMethod(.Generic)
>> }
>>
>>  adding the above two lines to Ops.Date makes, e.g.
>>
>> as.Date("1999-12-13") == "1999-06-14"
>>
>> behave as "expected".
>>
>>  Does it seem like a good idea?
>>  (I was inspired by a student's confusion, and by
>> the fact that Ops.factor does a similar thing -- although
>> in this case it seems more sensible to promote the
>> character to a Date rather than demoting the Date
>> to a character (in which case comparisons might not
>> work right?))
>>
>>  Similar questions might apply to Ops.POSIXt ...
>>
>>  Ben Bolker
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>



[Rd] Ops.Date: promote characters to Dates?
Ben Bolker