[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