Mark Heckmann
2010-Oct-28 08:31 UTC
[R] overloading the generic primitive functions "+" and "["
Ein eingebundener Text mit undefiniertem Zeichensatz wurde abgetrennt. Name: nicht verf?gbar URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20101028/d7e0cc89/attachment.pl>
Barry Rowlingson
2010-Oct-28 09:17 UTC
[R] overloading the generic primitive functions "+" and "["
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