Skip to content

Instantly share code, notes, and snippets.

@floybix
Created September 12, 2013 04:32

Revisions

  1. floybix created this gist Sep 12, 2013.
    28 changes: 28 additions & 0 deletions transitive_dependencies.r
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    ## find all transitive dependencies of an R package.

    distrib.pkgs <- library(lib.loc=R.home("library"))$results[,1]

    dependencies <-
    function(pkg, dependencies = c("Depends", "Imports", "LinkingTo"),
    pl = installed.packages())
    {
    if (!(pkg %in% rownames(pl))) stop("unknown pkg " pkg)
    fields <- pl[pkg, dependencies]
    fields <- fields[!is.na(fields)]
    deps <- unlist(strsplit(fields, ", "))
    deps <- sub(" \\(.*\\)", "", deps)
    setdiff(deps, c("R", distrib.pkgs))
    }

    transitive_dependencies <-
    function(pkg, pl = installed.packages())
    {
    deps <- c()
    more <- pkg
    while (length(more) > 0) {
    this <- head(more, 1)
    deps <- c(deps, dependencies(this, pl = pl))
    more <- tail(more, -1)
    }
    unique(deps)
    }