blob: 08b70b347ba43d97f66f0f03208c6559c21df3f7 [file] [log] [blame]
% File src/library/tools/man/package_dependencies.Rd
% Part of the R package, https://www.R-project.org
% Copyright 2012-2015 R Core Team
% Distributed under GPL 2 or later
\name{package_dependencies}
\alias{package_dependencies}
\title{Computations on the Dependency Hierarchy of Packages}
\description{
Find (recursively) dependencies or reverse dependencies of packages.
}
\usage{
package_dependencies(packages = NULL, db = NULL,
which = c("Depends", "Imports", "LinkingTo"),
recursive = FALSE, reverse = FALSE, verbose = getOption("verbose"))
}
\arguments{
\item{packages}{a character vector of package names.}
\item{db}{character matrix as from \code{\link{available.packages}()}
(with the default \code{NULL} the results of this call)
or data frame variants thereof. Alternatively, a package database
like the one available from
\url{https://cran.r-project.org/web/packages/packages.rds}.
}
\item{which}{a character vector listing the types of
dependencies, a subset of
\code{c("Depends", "Imports", "LinkingTo", "Suggests", "Enhances")}.
Character string \code{"all"} is shorthand for that vector,
character string \code{"most"} for the same vector without
\code{"Enhances"}.
}
\item{recursive}{logical: should (reverse) dependencies of (reverse)
dependencies (and so on) be included?}
\item{reverse}{logical: if \code{FALSE} (default), regular
dependencies are calculated, otherwise reverse dependencies.}
\item{verbose}{logical indicating if output should monitor the package
search cycles.}
}
\value{
Named list with one element for each package in argument \code{packages},
each consists of a character vector naming the (recursive) (reverse) dependencies
of that package.
For given packages which are not found in the db, \code{NULL} entries are returned,
as opposed to \code{character(0)} entries which indicate no dependencies.
}
\seealso{
\code{\link{dependsOnPkgs}}, and \code{\link{package.dependencies}} for checking
dependencies.
}
\examples{
\donttest{
myPkgs <- c("MASS", "Matrix", "KernSmooth", "class", "cluster", "codetools")
pdb <- available.packages()
system.time(
dep1 <- package_dependencies(myPkgs, db = pdb) # all arguments at default
) # very fast
utils::str(dep1, vec.len=10)
system.time( ## reverse dependencies, recursively --- takes much longer:
deps <- package_dependencies(myPkgs, db = pdb,
which = c("Depends", "Imports", "LinkingTo", "Suggests"),
recursive = TRUE, reverse = TRUE)
) # seen ~ 10 seconds
lengths(deps) # 2015-01-14: all are 7040, but codetools with 7046
}% dont test
}
\keyword{utilities}