Re: [R] Operator overloading

From: Spencer Graves <spencer.graves_at_pdf.com>
Date: Thu, 10 Jul 2008 11:51:49 -0700

      The 'polynom' package provides one example of how to do this. However, getAnywhere("+.polynomial") just told me "no object named ‘+.polynomial’ was found"; I don't know why. The documentation says it uses S3 classes. The 'Matrix' package should provide other examples, using S4 classes. You can get the package source for both as "*.tar.gz" files from CRAN, unzip the file and see what they did.

      Hope this helps. 
      Spencer     

Peter Dalgaard wrote:
> 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 "+"
>
>
>

______________________________________________
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 - 19:09:36 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 - 22:31:25 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