[R] "a"+"b"

Martin Morgan mtmorgan at fhcrc.org
Tue May 2 18:09:36 CEST 2006


(apologies if this appears twice; I had some mail posting issues)

I think %any-symbol% defines a binary operator, so

> "%+%" <- function(x,y) paste(x,y,sep="")
> "a" %+% "b"
[1] "ab"
> 

or for more fun

> setGeneric("%+%", function(x,y) standardGeneric("%+%"))
[1] "%+%"
> setMethod("%+%", signature(x="character", y="character"), function(x,y) paste(x,y,sep=""))
[1] "%+%"
> setMethod("%+%", signature(x="numeric", y="numeric"), function(x,y) x+y)
[1] "%+%"
> "a" %+% "b"
[1] "ab"
> 1 %+% 2
[1] 3
 

Martin

Matthew Dowle <mdowle at concordiafunds.com> writes:

> Thanks for the information.  By 'not easily' it sounds like it is possible,
> but how?  I'm happy to allow 'errors' like "2"+"3"="23", is that what an
> erroneous use could be?
>
> I tried the following, given the info in your reply, which works.  But is
> there a way to allow "a"+"b"="ab"?
>> x = "a"
>> `+.character` <- function(e1, e2) paste(e1,e2, sep="")
>> attr(x,"class")="character"
>> x+x
> [1] "aa"
>>
>
>> -----Original Message-----
>> From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk] 
>> Sent: 02 May 2006 12:03
>> To: Matthew Dowle
>> Cc: 'r-help at stat.math.ethz.ch'
>> Subject: Re: [R] "a"+"b"
>> 
>> 
>> Not easily.  There's a comment in ?Ops that for efficiency the group 
>> generics only dispatch on objects with a "class" attribute: 
>> otherwise you 
>> could use an S3 method like
>> 
>> `+.character` <- function(e1, e2) paste(e1,e2, sep="")
>> 
>> S4 methods are built on top of S3 methods as far as internal 
>> dispatch is 
>> concerned, so the same comment will apply there AFAICS.
>> 
>> I would think that the intention was also to positively 
>> discourage messing 
>> with the basics of R, as if you were able to do this 
>> erroneous uses would 
>> likely not get caught.
>> 
>> On Tue, 2 May 2006, Matthew Dowle wrote:
>> 
>> >
>> > Hi,
>> >
>> > Is there a way to define "+" so that "a"+"b" returns "ab" ?
>> >
>> >> setMethod("+",c("character","character"),paste)
>> > Error in setMethod("+", c("character", "character"), paste) :
>> >        the method for function '+' and signature e1="character", 
>> > e2="character" is sealed and cannot be re-defined
>> >> "a"+"b"
>> > Error in "a" + "b" : non-numeric argument to binary operator
>> >
>> > Thanks!
>> >
>> >
>> >
>> > 	[[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help at stat.math.ethz.ch mailing list 
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide! 
>> > http://www.R-project.org/posting-guide.html
>> >
>> 
>> -- 
>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>> University of Oxford,             Tel:  +44 1865 272861 (self)
>> 1 South Parks Road,                     +44 1865 272866 (PA)
>> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>>
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list