Учитывая файл DESCRIPTION пакета R, я хотел бы получить список зависимостей пакета (например, Depends
, Imports
, Suggests
). Кажется, что это должна быть решена проблема (например, devtools::install_github
), но я не могу придумать элегантный способ сделать это. Мое текущее решение состоит в том, чтобы полагаться на невыполненную функцию из tools
:
## adapted.from biocLite("pkgDepTools")
cleanPkgField <- function(val) {
if (is.na(val))
return(character(0))
val <- names(tools:::.split_dependencies(val))
if (is.null(val))
return(character(0))
val <- val[! val %in% "R"]
if (length(val))
return(val)
return(character(0))
}
get_deps <- function(dp){
dcf <- read.dcf(paste0(dp, "/DESCRIPTION"))
suggests <- imports <- depends <- NULL
if("Suggests" %in% colnames(dcf))
suggests <- cleanPkgField(dcf[,"Suggests"])
if("Imports" %in% colnames(dcf))
imports <- cleanPkgField(dcf[,"Imports"])
if("Depends" %in% colnames(dcf))
depends <- cleanPkgField(dcf[,"Depends"])
c(suggests, imports, depends)
## Doesn't work for packages not on CRAN
# unlist(tools::package_dependencies(package_names, available.packages(),
# which=c("Depends", "Imports", "Suggests"), recursive=FALSE))
}
где dp
- каталог пакетов. Кажется, что это работает, но похоже, что для этого должна существовать существующая функция или, по крайней мере, что-то более чистое, чем полагаться на скрытую и неэкспортированную функцию .split_dependencies()
в пакете tools
.
Обратите внимание, что более широко цитируемый способ получения зависимостей для пакета - это вовсе не полагаться на файл DESCRIPTION, а скорее использовать что-то вроде tools::package_dependencies
, которое предполагает, что пакет можно найти в каком-то подобном хранилище, подобном CRAN, например эти вопросы:
- Загружать только источники пакета и все зависимости,
- Обновить определенный пакет R и его зависимости
обратите внимание, что хотя описание проблемы одно и то же, тот факт, что пакет не находится в CRAN (или аналогичном репозитории), делает этот подход невозможным.