[R] overloading the generic primitive functions "+" and "["

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Thu Oct 28 11:17:26 CEST 2010


On Thu, Oct 28, 2010 at 9:31 AM, Mark Heckmann <mark.heckmann at gmx.de> wrote:
>
> How can I add a new method to the generic function "[" or "+"
>
> I want to create a S3 and S4 class that will use the "[" and "+" method in a different way.
> How can I overload the generic primitive "[" or "+" so the method dispatch will work correctly for my class?
>
> I saw an example of this in the ggplot2 package where different objects are joined using the "+" primitive.
> Still, I could not figure out how to do that.
>
> Can someone give a small code example to show how that works?

 With S3 method stuff, to override "+" its as easy as writing Ops.{class}:

 > a="hello"
 > b="world"
 > a+b
 Error in a + b : non-numeric argument to binary operator
 > class(a)="ss"
 > class(b)="ss"
 > Ops.ss=function(e1,e2){paste(e1,e2)}
 > a+b
 [1] "hello world"

 better make sure I haven't broken anything:

 > c=1
 > d=2
 > c+d
 [1] 3   *phew*

The Ops function should really have a handler for all possible
operators (*, /, - etc) or fail with an error - see Ops.Date for
example.

With S4 classes... umm.. signatures... setMethod... setGeneric...
errr. something... representations... setClass this that... yeah.
Something like that.

Barry



More information about the R-help mailing list