[R] Use generic functions, e.g. print, without UseMethod?

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Aug 11 09:56:50 CEST 2023


Às 08:20 de 11/08/2023, Sigbert Klinke escreveu:
> Hello,
> 
> I have defined a function 'equations(...)' which returns an object with 
> class 'equations'. I also defined a function 'print.equations' which 
> prints the object. But I did not use 'equations <- function(x, ...) 
> UseMethod("equations"). Two questions:
> 
> 1.) Is this a sensible approach?
> 2.) If yes, are there any pitfalls I could run in later?
> 
> Thanks
> 
> Sigbert
> 
Hello,

You have to ask yourself what kind of objects are you passing to 
'equations(...)'?
Do you need to have

'equations.double(...)'
'equations.character(...)'
'equations.formula(...)'
'equations.matrix(...)'
[...]

specifically written for objects of class

numeric
character
formula
matrix
[...]

respectively?
These methods would act on the respective class, process those objects 
somewhat differently because they are of different classes and output an 
object of class "equation".
(If so, it is recommended to write a 'equations.default(...)' too.)

Methods such as print.equation or summary.equation are written when you 
want your new class to have functionality your new class' users are 
familiar with.

If, for instance, autoprint is on as it frequently is, users can see 
their "equation" by typing its name at a prompt. print.equation would 
display the "equation" in a way relevant to that new class.

But this does not mean that the function that *creates* the object needs 
to be generic, you only need a new generic to have methods processing 
inputs of different classes in ways specific to those classes.

Hope this helps,

Rui Barradas



More information about the R-help mailing list