Với tệp DESCRIPTION của gói R, tôi muốn lấy danh sách các gói phụ thuộc (ví dụ: Depends
, Imports
, Suggests
). Có vẻ như đây là vấn đề được giải quyết (ví dụ: devtools::install_github
) nhưng tôi dường như không thể tìm ra cách thanh lịch để thực hiện việc này. Giải pháp hiện tại của tôi là dựa vào một chức năng unexported từ tools
:Trích xuất phụ thuộc gói R thanh lịch của gói không được liệt kê trên CRAN
## 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))
}
nơi dp
là thư mục gói. Điều này dường như làm việc, nhưng nó cảm thấy như có nên có một chức năng mở rộng để làm điều này, hoặc ít nhất một cái gì đó sạch hơn là dựa vào chức năng .split_dependencies()
ẩn và không xuất khẩu trong gói tools
.
Lưu ý rằng cách được trích dẫn rộng rãi hơn để nhận phụ thuộc cho gói không phải dựa vào tệp DESCRIPTION, mà là sử dụng một cái gì đó như tools::package_dependencies
giả định gói có thể được tìm thấy trên một số kho lưu trữ giống CRAN, ví dụ: những SO câu hỏi:
- Only download sources of a package and all dependencies,
- Update a specific R package and its dependencies
lưu ý rằng trong khi mô tả vấn đề là như nhau, thực tế là các gói không nằm trong cran (hoặc kho tương tự) làm cho cách tiếp cận mà không thể .