[R] A technical question on methods for "+"

Andrew Simmons @kw@|mmo @end|ng |rom gm@||@com
Thu Dec 2 21:10:32 CET 2021


This is because + dispatches on the class attribute, which a string like
"test" has set to NULL, so it doesn't dispatch. You can add the class
yourself like structure("test", class = "character") and that should work.

I'm not sure where it's explained, but most primitive functions dispatch on
the class attribute, which is different from UseMethod which calls class()
if the class attribute is NULL.

I think if you want to define something like what you have written, you
could write a function `%+%` use that instead

On Thu, Dec 2, 2021, 14:32 Bert Gunter <bgunter.4567 using gmail.com> wrote:

> ... and probably a dumb one and almost certainly not of interest to
> most R users. But anyway...
>
> ?"+" says:
> "The unary and binary arithmetic operators are generic functions:
> methods can be written for them individually or via the Ops group
> generic function. "
>
> So:
> "+.character" <- function(e1, e2) paste0(e1, e2)
> ## but this doesn't 'work':
> > "a" + "b"
> Error in "a" + "b" : non-numeric argument to binary operator
>
> ## but explicitly invoking the method does 'work' :
> > "+.character"('a','b')
> [1] "ab"
>
> ##Note also:
> > methods("+")
> [1] +.character +.Date      +.IDate*    +.POSIXt    +.trellis*
>
> So what am I failing to understand?
> Thanks.
>
> Bert Gunter
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list