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

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Sun Feb 21 18:05:42 CET 2021

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)

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

More information about the R-package-devel mailing list