Counting CRAN Package Depends, Imports and LinkingTo

August 5, 2012

(This article was first published on Thinking inside the box , and kindly contributed to R-bloggers)

The recent update by Søren Højsgaard’s to
his gRbase
package for graphical models made it the 75th package to depend on our
Rcpp package for R
and C++ integration. So in a lighthearted weekend moment, I
tweeted about gRbase being number 75 for Rcpp
to which Hadley replied, asking if Rcpp was in
fact number one among R package Depends.
Far from it, and I immediately replied listing lattice and
Matrix as packages with way more other packages depending upon them.

But as the question seemed deserving of a bit more analysis, I spent a few minutes
on this and prepared three charts listing package in order of reverse
Depends, reverse Imports and reverse LinkingTo.

First off, the reverse Depends:. This is the standard means of
declaring a dependence of one package upon another.

CRAN package chart of Reverse Depends relations

Unsurprisingly, the MASS package from the
classic Venables and Ripley
book comes first, with Deepayan Sarkar‘s powerful
lattice package (also
covered in a
coming second. These are both recommended packages which are commonly distributed with R itself.
Next are mvtnorm
survival. Our
Rcpp is up there in
the top-ten, but not a frontrunner.

With the advent of namespaces a few R releases ago, it became possible to
import functions from other packages. So the Imports: statement
now provides an alternative to the (older) Depends:. The next
chart displays the same relationship for Imports::

CRAN package chart of Reverse Imports relations

lattice still leads,
Hadleys’s plyr package
grabbed the second spot just before
MASS and

It is interesting to see that the sheer number of Imports: is
still not where the Depends: are. On the other hand, we see a
number of more recent packages popping up in the second chart. This may
reflect more recent coding practices. It will be interesting to see how this
stacks up over time when we revisit this chart.

Lastly, we can also look at LinkingTo:, a declaration used to
provide a C/C++-level dependency at the source code level. We use
this in the
Rcpp family to
provide automatic resolution of the header files needed to compile against
our packages. And unsurprisingly, because packages using
actually use its API (rather than R functions), the package is a little ahead
of others. In the package we find three more packages of the
family, but only a limited number of other packages as
C/C++-level dependencies are still somewhat rare in the R universe.
There are also fewer packages overall making use of this mechanism.

CRAN package chart of Reverse LinkingTo relations

One could of course take this one level further and sum up dependencies in a
recursive manner, or visualize the relationship differently. But these
dotchart graphs provide a first visual description of the
magnitude of Depends, Imports and
LinkingTo among CRAN packages for R.

To leave a comment for the author, please follow the link and comment on their blog: Thinking inside the box . offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.


Mango solutions

RStudio homepage

Zero Inflated Models and Generalized Linear Mixed Models with R

Dommino data lab

Quantide: statistical consulting and training



CRC R books series

Six Sigma Online Training

Contact us if you wish to help support R-bloggers, and place your banner here.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)