[Rd] new function to tools/utils package: dependencies based on DESCRIPTION file

Thierry Onkelinx thierry.onkelinx at inbo.be
Tue Jun 14 17:17:52 CEST 2016


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.Gorecki at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list