On Wed, Dec 31, 2014 at 9:41 AM, Martin Morgan <mtmor...@fredhutch.org>
wrote:
On 12/24/2014 07:31 PM, Maintainer wrote:
Hi,
Many bioconductor packages Depends on other packages but not Imports
other packages. (e.g., IRanges Depends on BiocGenerics.) Imports is
usually preferred to Depends.
http://stackoverflow.com/questions/8637993/better-explanation-of-when-to-use-imports-depends
http://obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/
Could the unnecessary Depends be forced to be replaced by Imports?
This should improve the package load time significantly.
R package symbols and other objects are collated at build time into a
'name
space'. When used,
- Import: loads the name space from disk.
- Depends: loads the name space from disk, and attaches it to the
search()
path.
Attaching is very inexpensive compared to loading, so there is no speed
improvement gained by Import'ing instead of Depend'ing.
Yes. For example, changing Depends to Imports does not improve the
package load time much.
But loading a package in 4 sec seems to be too long.
system.time(suppressPackageStartupMessages(library(MBASED)))
user system elapsed
4.404 0.100 4.553
For example, it only takes 10% of the time to load ggplot2. It seems
that many bioconductor packages have similar problems.
system.time(suppressPackageStartupMessages(library(ggplot2)))
user system elapsed
0.394 0.036 0.460
The main reason to Depend: on a package is because the symbols defined by
the package are needed by the end-user. Import'ing a package is
appropriate
when the package provides functionality only relevant to the package
author.
What causes the load time to be too long? Is it because exporting too
many functions from all dependent packages to the global namespace?
There are likely to be specific packages that mis-use Depends; packages
such
as IRanges, GenomicRanges, etc use Depends: as intended, to provide
functions that are useful to the end user.
Maintainers are certainly encouraged to think carefully about adding
packages providing functionality irrelevant to the end-user to the
Depends:
field. The codetoolsBioC package (available from svn, see
http://bioconductor.org/developers/how-to/source-control/) provides some
mostly reliable hints to package authors about correctly formulating a
NAMESPACE file to facilitate using Imports: instead of Depends:.
General questions about Bioconductor packages should be addressed to the
support forum https://support.bioconductor.org.
Questions about Bioconductor development (such as this) should be
addressed
to the bioc-devel mailing list (subscription required)
https://stat.ethz.ch/mailman/listinfo/bioc-devel.
I have cc'd the bioc-devel mailing list; I hope that is ok.
--
Regards,
Peng