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]]
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
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 >
Ok, thanks for clarifying.> -----Original Message----- > From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk] > Sent: 02 May 2006 12:51 > To: Matthew Dowle > Cc: 'r-help at stat.math.ethz.ch' > Subject: RE: [R] "a"+"b" > > > On Tue, 2 May 2006, Matthew Dowle wrote: > > > Thanks for the information. By 'not easily' it sounds like it is > > possible, but how? > > Change the C code. R is Open Source, so anything is possible. > > > I'm happy to allow 'errors' like "2"+"3"="23", is that what an > > erroneous use could be? > > 2 + x, for example, where x is not numeric. > > > 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 > >> > > > > > > -- > 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 >
Perfect. Thank you!> -----Original Message----- > From: Martin Morgan [mailto:mtmorgan at fhcrc.org] > Sent: 02 May 2006 17:10 > To: Matthew Dowle > Cc: 'Prof Brian Ripley'; "'r-help@/usr/bin/idn: > idna_to_ascii_4z() failed with error 3. > <r-help at stat.math.ethz.ch>"@fhcrc.org > Subject: Re: [R] "a"+"b" > > > 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 >