[R-pkg-devel] Deprecating apparent S3 method, changing name

Jan van der Laan rhe|p @end|ng |rom eoo@@dd@@n|
Tue Oct 1 09:32:59 CEST 2024



On 9/26/24 23:48, Murray Efford via R-package-devel wrote:

> I am tossing up between (i) appealing to CRAN to allow the submission through with NOTEs until it feels safe to remove the functions with misleading names altogether, and (ii) removing them now and warning users about the new names in an  onLoad message.


A third solution would be to create a `esa.plot` method that redirects 
the user to `esaPlot` etc. So you create a function `esa.plot`. Its 
arguments should match those of the `esa` generic. If the `esaPlot` 
function has completely different arguments, you could have this 
`esa.plot` function give an error, redirecting the user to `esaPlot`.

You will still need to document the `esa.plot` function as a method to 
prevent warnings/notes:

\usage{
\method{esa}{plot}(..)
}

And you should export it:

export(esa.plot)

So that it can be called directly. To prevent that the `esa.plot` is 
called when a user passes a `plot` object to the `esa` generic, you 
could use the solution mentioned below:



> ________________________________
> From: Ivan Krylov <ikrylov using disroot.org>
> 
> Theoretically speaking, if there was a place in your package where you
> called the esa() generic with a user-supplied object, esa.plot() would
> be a reachable S3 method, because the user would be able to construct
> structure(list(), class = 'plot') and give it to your package code to
> call esa(plot_object) and have it dispatched to esa.plot(). (Which
> wouldn't be useful to the user, but that's how S3 works.)
>

In NAMESPACE you can do:

S3method(esa, plot, esaplotmethod)

To register `esaplotmethod` as the method that is called when using 
`esa` with an object of type `plot`. This would prevent this issue. 
However, this probably (can't test as the note doesn't happen on my 
system) doesn't resolve the issue with the NOTE.


Best,
Jan



More information about the R-package-devel mailing list