[R-pkg-devel] Courtesy methods and explosive dependencies
Ben Bolker
bbolker @ending from gm@il@com
Fri May 25 16:27:19 CEST 2018
Russ Lenth may have picked a suboptimal example (we could search
through the dependencies of emmeans for an example with more
non-(base+recommended) recursive dependencies, but the general point
definitely holds.
"(formally undefined) recommended-level-2 R packages" seems like a can
of worms (I know what would be on my list, but I wonder how much it
would overlap everyone else's)
FWIW I don't know of a better solution than #1 from the original post.
cheers
Ben Bolker
On Fri, May 25, 2018 at 3:13 AM, Martin Maechler
<maechler using stat.math.ethz.ch> wrote:
>>>>>> Lenth, Russell V
>>>>>> on Thu, 24 May 2018 23:14:42 +0000 writes:
>
> > 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.
>
> There must be a mistake here -- I think in your perception:
>
> 'multcomp' does *not* have excessive dependencies (though I'd
> say one too much):
>
>> tools::package_dependencies("multcomp")
> $multcomp
> [1] "stats" "graphics" "mvtnorm" "survival" "TH.data" "sandwich"
> [7] "codetools"
>
>> tools::package_dependencies("multcomp", recursive=TRUE)
> $multcomp
> [1] "stats" "graphics" "mvtnorm" "survival" "TH.data" "sandwich"
> [7] "codetools" "methods" "utils" "zoo" "Matrix" "splines"
> [13] "MASS" "grDevices" "grid" "lattice"
>
>>
>
> Apart from "base + recommended" packages (which *everyone* has installed),
> these are just 4 packages:
>
> mvtnorm
> TH.data
> sandwich
> zoo
>
> where mvtnorm, sandwich, and zoo really are among the
> (formally undefined) recommended-level-2 R packages... so I do
> wonder if you really had needed to install.
>
> The 'TH.data' { TH <==> maintainer("multcomp") } package I
> think should not be in the strict dependencies of 'multcomp' but
> rather in its "Suggests".... something I'd say must be true for
> all data packages:
> The whole idea of data packages is that they should be needed
> for interesting help page examples, vignettes, maybe even tests,
> but not for package functionality.
>
> In sum: I'd strongly advise to not change from keeping multcomp
> among your imports.
>
> Martin Maechler
> ETH Zurich
>
> > 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
>
> > Russ
>
> > --
> > 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/
>
> > ______________________________________________
> > R-package-devel using r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-package-devel
>
> ______________________________________________
> 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