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

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Thu Dec 2 21:40:03 CET 2021


The reason for this behaviour is that finding methods is a lot slower 
than just evaluating the built-in function.  So R takes the time to 
determine if there's an attribute named "class" attached, but doesn't go 
searching further if there isn't one.

Duncan Murdoch

On 02/12/2021 3:10 p.m., Andrew Simmons wrote:
> 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]]
> 
> ______________________________________________
> 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.
>



More information about the R-help mailing list