[R-pkg-devel] Support for several versions of another package

Gábor Csárdi c@@rd|@g@bor @end|ng |rom gm@||@com
Sun Feb 21 18:17:13 CET 2021


On Sun, Feb 21, 2021 at 6:05 PM Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>
> On 21/02/2021 9:47 a.m., Iñaki Ucar wrote:
> > Hi,
> >
> > Let's say that pkgA uses pkgB::function1. Then, version 2 of pkgB
> > removes function1 and exports function2 for the same functionality. So
> > pkgA does something along these lines:
> >
> > if (utils::packageVersion("pkgB") < 2) {
> >    pkgB::function1()
> > } else {
> >    pkgB::function2()
> > }
> >
> > I'd say that there's nothing wrong with this code, and yet checks will
> > complain about "missing o unexported object" in pkgB, for either
> > function1 or function2 depending on the version of pkgB that is
> > available.
> >
> > Isn't this a false positive? Or is there a better way of doing this?
>
> I'd agree it's a false positive, but I wouldn't expect the check code to
> be able to interpret the logic.
>
> A better way could be to handle it in your NAMESPACE file.  For example,
> this is legal (if nonsense):
>
> if (utils::packageVersion("rgl") < "0.99.0") {
>         importFrom(rgl, bar = somethingNonexistent)
> } else
>         importFrom(rgl, bar = persp3d)

Isn't this evaluated at install time? I think it is, and then you
would need to potentially reinstall the package when you update rgl,
which is not quite ideal, because it is easy to miss it, and then
you'll get runtime errors.

Gabor

> Now in the package you can refer to bar, and it'll be persp3d for a new
> version of rgl, somethingNonexistent for an old one.  You won't get a
> warning that somethingNonexistent doesn't exist as long as you're not on
> the old version of rgl.
>
> Duncan Murdoch
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list