[Bioc-devel] Reducing dependencies

Aaron Lun |n||n|te@monkey@@w|th@keybo@rd@ @end|ng |rom gm@||@com
Wed Jun 3 10:21:28 CEST 2020

> We have recently extended our Bioconductor package tradeSeq <https://bioconductor.org/packages/devel/bioc/html/tradeSeq.html> to allow different input formats and accommodate extended downstream analyses, by building on other R/Bioconductor packages.

I would guess that the problem starts here. Having a mega-package that 
does everything but walk the dog is antithetical to the Bioconductor 
philosophy of an ecosystem of interoperable packages.

 From what you've described, a better architecture would be to have a 
separate package to convert multiple formats into a standard format 
(e.g., SCE), use tradeSeq to do the number crunching, and then emit 
another standard format for downstream methods to operate on.

This is compartmentalized for easier development and maintenance; 
reduces dependencies for all packages; and provides multiple entry 
points for other packages to use part or all of your workflow.

If you need to demonstrate how to use all of these packages in tandem to 
answer a complex scientific question, a vignette or book is usually 
better than writing wrappers. Teach a user to fish, etc.

> However this has resulted in a significant increase in the number of dependencies due to relying on other packages that also have many dependencies, for example causing very long build times on Travis <https://travis-ci.com/github/statOmics/tradeSeq>.

Just get rid of all the tidyverse packages, you don't really need those.

> We are therefore wondering about current recommendations to reduce the dependency load. We have moved some larger packages from ‘Imports’ to ‘Suggests’, but to no avail.

I consider plots to be an optional functionality of any package doing 
serious computation. Very few of the packages I am involved in have 
plotting functionality (unless that is their primary purpose, e.g., 
iSEE). In fact, the only one I can recall is SingleR, and I was dragged 
kicking and screaming into including plotting functions there. Even so, 
I shoved all the plot-related packages into "Suggests:" because I 
couldn't stand the thought of always importing them for the sake of art.

tl;dr chuck ggplot2 into "Suggests:" and shave off ~20 dependencies. Or 
even better, make a new package for "trajectory-related plots" and then 
other people can use them even if they don't care for tradeSeq's math.


More information about the Bioc-devel mailing list