Recently I have been working on a new R package nc which provides a new syntax for melting data (converting from wide to tall data tables). I write “tables” rather than “frames” here because this package actually has a hard dependency (Imports) on the excellent data.table package, which provides an efficient implementation of the melt function.

Today I noticed that data.table is one of the two packages mentioned in the “Getting Started in R – Tinyverse Edition” guide published by Dirk Eddelbuettel. The other package mentioned in that guide is ggplot2, which is part of the “tidyverse” in R. The Tinyverse is a reaction against the tidyverse, which is notorious for a complex network of dependencies. The main Tinyverse principle is that hard dependencies should be limited. For example, another member of the Tinyverse is tinytest which is a testing framework which has much fewer hard dependencies (actually only recommended packages that come with every version of R) than the popular testthat.

On the one hand, I agree with the tinyverse principle of few dependencies – it makes software less complicated to install, and easier to maintain. On the other hand, some “killer apps” like ggplot2 are really important tools, even if they have a lot of dependencies.

Finally this blog post by Dirk shows how to compute recursive dependencies. Below I show the difference between tiny (data.table, essentially no dependencies) and tidy (ggplot2, 44 hard dependencies).

> AP <- available.packages()
> tools::package_dependencies(package=c("data.table", "ggplot2"), recursive=TRUE, db=AP)
[1] "methods"

 [1] "digest"       "grDevices"    "grid"         "gtable"       "lazyeval"    
 [6] "MASS"         "mgcv"         "reshape2"     "rlang"        "scales"      
[11] "stats"        "tibble"       "viridisLite"  "withr"        "graphics"    
[16] "utils"        "methods"      "nlme"         "Matrix"       "splines"     
[21] "plyr"         "Rcpp"         "stringr"      "labeling"     "munsell"     
[26] "R6"           "RColorBrewer" "cli"          "crayon"       "fansi"       
[31] "pillar"       "pkgconfig"    "assertthat"   "lattice"      "colorspace"  
[36] "utf8"         "vctrs"        "glue"         "magrittr"     "stringi"     
[41] "tools"        "backports"    "ellipsis"     "zeallot"     

> packageVersion("data.table")
[1] ‘1.12.5’
> packageVersion("ggplot2")
[1] ‘3.2.0’