Dear Jan, Similar functionality is available in devtools::dev_package_deps()
Best regards, ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance Kliniekstraat 25 1070 Anderlecht Belgium To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey 2016-06-14 16:54 GMT+02:00 Jan Górecki <j.gore...@wit.edu.pl>: > Hi all, > > Packages tools and utils have a lot of useful stuff for R developers. > I find one task still not as straightforward as it could. Simply to > extract dependencies of a package from DESCRIPTION file (before it is > even installed to library). This would be valuable in automation of CI > setup in a more meta-data driven way. > The simple function below, I know it is short and simple, but having > it to be defined in each CI workflow is a pain, it could be already > available in tools or utils namespace. > > package.dependencies.dcf <- function(file = "DESCRIPTION", which = > c("Depends","Imports","LinkingTo")) { > stopifnot(file.exists(file), is.character(which)) > which_all <- c("Depends", "Imports", "LinkingTo", "Suggests", > "Enhances") > if (identical(which, "all")) > which <- which_all > else if (identical(which, "most")) > which <- c("Depends", "Imports", "LinkingTo", "Suggests") > stopifnot(which %in% which_all) > dcf <- read.dcf(file, which) > # parse fields > raw.deps <- unlist(strsplit(dcf[!is.na(dcf)], ",", fixed = TRUE)) > # strip stated dependency version > deps <- trimws(sapply(strsplit(trimws(raw.deps), "(", fixed = > TRUE), `[[`, 1L)) > # exclude base R pkgs > base.pkgs <- c("R", rownames(installed.packages(priority = "base"))) > setdiff(deps, base.pkgs) > } > > This allows to easily install all package dependencies just based on > DESCRIPTION file, so simplify that in custom CI workflows to: > > if (length(pkgs<-package.dependencies.dcf(which="all"))) > install.packages(pkgs) > > And would not require to install custom packages or shell scripts. > > Regards, > Jan Gorecki > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel