[R-pkg-devel] Courtesy methods and explosive dependencies

Lenth, Russell V ru@@ell-lenth @ending from uiow@@edu
Fri May 25 01:14:42 CEST 2018

Package developers,

I am trying to severely cut down on the number of dependencies of my package emmeans. It is now 48, which is quite a few (but that is down from over 100 in the preceding version, where I made the unwise choice of including a particularly greedy package in Imports). I hate to force users to install dozens of packages that they don't really need or want, but it seems very hard to avoid.

Case in point: emmeans provides additional methods for 'cld' and 'glht' from the multcomp package. Accordingly, I import their generics, and register my additional methods. But because I import the generics, I must list multcomp in Imports, and that results in the addition of 16 required packages, some of which I never use. More important, I believe that NONE of those 16 packages are required for the correct functioning of my courtesy methods. The only things I really need are the generics.

On the flip side, emmeans defines some generics of its own that I invite other package developers to extend so that emmeans supports their models. If those packages import emmeans, there is an overhead of 48 dependencies; again, most of these are packages that are not needed at all for those packages' methods to work. I don't like being responsible for that.

I believe this is a very common problem, not just with my own packages. It's one thing to extend a base method like 'print'; but extending methods in contributed packages creates these dependency explosions. I have hundreds of packages installed on my system - a couple dozen I care about, another few dozen that seem fairly desirable, and a couple hundred that I don't even know what they're for, other than that things will break if I uninstall them.

I do know of a couple ways to reduce these dependencies in the case of my multcomp dependencies:

1. I could simply export my S3 methods for cld and glht as functions, rather than registering them as S3 methods. 
    Then I could move multcomp to Suggests. The downside is that it clutters the namespace for emmeans.

2. I could define the generics for cld and glht in my own package, and export them; and move multcomp to Suggests.
    Again, it clutters the namespace, and creates warning messages about (if not real issues with) masking.

Probably (1) is better than (2), but is it better than what I do now? Is there something else that I (and probably a whole lot of other people) don't know?

I wish there were an ImportGenerics or an ImportWithoutDependencies or some such field possible in DESCRIPTION.

I appreciate any suggestions. Thanks


Russell V. Lenth  -  Professor Emeritus
Department of Statistics and Actuarial Science   
The University of Iowa  -  Iowa City, IA 52242  USA   
Voice (319)335-0712  -  FAX (319)335-3017
russell-lenth using uiowa.edu  -  http://www.stat.uiowa.edu/~rlenth/ 

More information about the R-package-devel mailing list