Function to list package dependencies

This commit is contained in:
2022-06-16 11:20:17 +01:00
parent e2c1f3ced7
commit 6ea4f81bc9
4 changed files with 60 additions and 0 deletions

View File

@@ -8,3 +8,4 @@ URL: https://avsdev.uk/R/Rpacman
Description: Very simple package manager for R which allows scanning for used packages, finding their dependencies and versions, creating a lock file and installing the packages on a new build. Description: Very simple package manager for R which allows scanning for used packages, finding their dependencies and versions, creating a lock file and installing the packages on a new build.
License: GPL (>= 3) License: GPL (>= 3)
Depends: R (>= 3.1.0), dplyr, magrittr, renv Depends: R (>= 3.1.0), dplyr, magrittr, renv
RoxygenNote: 7.1.1

3
NAMESPACE Normal file
View File

@@ -0,0 +1,3 @@
# Generated by roxygen2: do not edit by hand
export(list_depends)

39
R/list_depends.R Normal file
View File

@@ -0,0 +1,39 @@
.list_depends <- function(depends, gen) {
packages <- installed.packages()
packages <- as.data.frame(packages)
packages <- packages[packages$Package %in% depends,]
packages <- packages[,c("Package", "Version", "Imports")]
packages$Imports <- gsub(packages$Imports, pattern = "\n", replacement = " ")
packages$Imports <- strsplit(packages$Imports, ", ")
packages <- data.frame(
package = rep(packages$Package, lengths(packages$Imports)),
version = rep(packages$Version, lengths(packages$Imports)),
imports = unlist(packages$Imports)
)
packages$min_version <- gsub(packages$imports, pattern = "[^ ]*( \\([=> ]*([^)]+)\\))?", replacement = "\\2")
packages$min_version = ifelse(nchar(packages$min_version) == 0, NA_character_, packages$min_version)
packages$imports <- gsub(packages$imports, pattern = " \\([^)]*\\)", replacement = "")
packages$generation <- gen
depends_next <- packages$imports[!is.na(packages$imports)]
depends_next <- sort(unique(depends_next))
if (length(depends_next) > 0) {
packages_next <- list_imports(depends_next, gen + 1)
packages <- rbind(packages, packages_next)
}
return(packages)
}
#' Recursively find all the installed dependencies of one or more installed
#' packages.
#'
#' @param depends A character vector of packages to find dependencies of
#'
#' @return A data frame with the dependency tree
#' @export
list_depends <- function(depends) {
.list_depends(depends, gen = 0)
}

17
man/list_depends.Rd Normal file
View File

@@ -0,0 +1,17 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/list_depends.R
\name{list_depends}
\alias{list_depends}
\title{Recursively find all the installed dependencies of one or more packages.}
\usage{
list_depends(depends)
}
\arguments{
\item{depends}{A character vector of packages to find dependencies of}
}
\value{
A data frame with the dependency tree
}
\description{
Recursively find all the installed dependencies of one or more packages.
}