class() does not always return the class attribute, try something more like attr(, "class"), you'll see what I mean
On Thu, Dec 2, 2021, 15:23 Bert Gunter <bgunter.4...@gmail.com> wrote: > "This is because + dispatches on the class attribute, which a string > like "test" has set to NULL" > Not true. > > > class('test') > [1] "character" > > But apparently, as Denes and Jeff said, the class must be explicitly > set, rather than relying on its built-in/implicit type. > > With the above hint, I looked up what ?class had to say. It is: > > "Note that for objects x of an implicit (or an S4) class, when a (S3) > generic function foo(x) is called, method dispatch may use more > classes than are returned by class(x), e.g., for a numeric matrix, the > foo.numeric() method may apply. The exact full character vector of the > classes which UseMethod() uses, is available as .class2(x) since R > version 4.0.0. (This also applies to S4 objects when S3 dispatch is > considered, see below.)" > > I think this is the "official" explanation, but I find it rather opaque. > > Thanks to all for your Help in finding the explanation. Much appreciated. > > Bert > > On Thu, Dec 2, 2021 at 12:10 PM Andrew Simmons <akwsi...@gmail.com> 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.4...@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@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@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.