Re: [R] Operator overloading

From: Peter Dalgaard <P.Dalgaard_at_biostat.ku.dk>
Date: Thu, 10 Jul 2008 15:05:58 +0200

hadley wickham wrote:

> On Thu, Jul 10, 2008 at 5:09 AM, Peter Dalgaard
> <P.Dalgaard_at_biostat.ku.dk> wrote:
>   
>> Tine wrote:
>>     

>>> Hi!
>>>
>>> I was just wondering is there anyway to overload operator for custom
>>> class.
>>> For example:
>>> I have two matrices A and B with same dimensions. I want to overload
>>> operator '+' with my own function.
>>> Or even better can I create my own (new) operator.
>>> Example:
>>> A+-B where '+-' would be some function.
>>>
>>>
>> You can define an S3 method
>>
>> "+.myclass" <- function(a,b) {...}
>>
>> Notice that dispatch is only on the 1st argument. This is a generic
>> weakness of  S3 methods. The Matrix package implements similar things
>> with S4 methods, but it does tend to get rather complicated.
>>     
>
> That's not completely true is it?
>
>   
>> 2 * unit(2, "cm")
>>     
> [1] 2*2cm
>   
>> unit(2, "cm") * 2
>>     
> [1] 2*2cm
>
> (But I'm not sure why that works)
>   

Group generics. Yes, I forgot about those. They dispatch on _any_ argument being of a given class. The problem is that it is a single dispatch, which is why R gets itself in a twist when you try to add Dates and difftimes:

> as.Date("2008-7-10")+as.difftime(2,units="days") [1] "2008-07-12"
Warning message:
Incompatible methods ("+.Date", "Ops.difftime") for "+" > as.difftime(2,units="days")+as.Date("2008-7-10") Time difference of 14072 days
Warning message:

Incompatible methods ("Ops.difftime", "+.Date") for "+"

-- 
   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard_at_biostat.ku.dk)              FAX: (+45) 35327907

______________________________________________
R-help_at_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.
Received on Thu 10 Jul 2008 - 13:10:17 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 10 Jul 2008 - 19:32:10 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive