R包,repos,其他项目(例如bookdown)通常有一个名为DESCRIPTION的文件,其中列出了项目所需的包。有没有一种快速简单的方法来安装所需的软件包?
DESCRIPTION
kcugc4gi1#
如果你想要最小的依赖,那么你可以写一个基于read.dcf的 Package 器。我的 Package 器接受一个DESCRIPTION文件,并返回一个字符向量,列出所描述的包的依赖(可选反向,可选递归)。你可以通过将结果或子集传递给install.packages来安装(像往常一样)。
read.dcf
install.packages
function(file, db = NULL, ...) { dsc <- read.dcf(file)[1L, ] # assuming ASCII; see tools:::.read_description pkg <- dsc["Package"] if (is.null(db)) db <- utils::available.packages() db <- rbind(db[db[, "Package"] != pkg, , drop = FALSE], dsc[colnames(db)]) tools::package_dependencies(pkg, db, ...)[[1L]] }
字符串我刚刚测试了一下...它似乎做了我想要的...
> description_dependencies <- function(file, db = NULL, ...) { + dsc <- read.dcf(file)[1L, ] # assuming ASCII; see tools:::.read_description + pkg <- dsc["Package"] + if (is.null(db)) + db <- utils::available.packages() + db <- rbind(db[db[, "Package"] != pkg, , drop = FALSE], + dsc[colnames(db)]) + tools::package_dependencies(pkg, db, ...)[[1L]] + } > tf <- tempfile() > writeLines(con = tf, + c("Package: zzz", + "Version: 0.0.1", + "Depends: R (>= 3.5.0), methods", + "LinkingTo: Matrix (>= 1.6-1)", + "Imports:\n\tstats,\n\ttools,\n\tutils", + "Suggests: lattice, nlme", + "Enhances: MatrixModels")) > db <- available.packages() # expensive, so reuse > description_dependencies(tf, db, which = "all") [1] "methods" "stats" "tools" "utils" "Matrix" [6] "lattice" "nlme" "MatrixModels" > description_dependencies(tf, db, which = "most") [1] "methods" "stats" "tools" "utils" "Matrix" "lattice" "nlme" > description_dependencies(tf, db, which = "strong") [1] "methods" "stats" "tools" "utils" "Matrix" > description_dependencies(tf, db, which = c("Suggests", "Enhances")) [1] "lattice" "nlme" "MatrixModels"
型
kq0g1dla2#
以下是如何安装DESCRIPTION文件中列出的所有软件包:
remotes::install_deps(upgrade = "always")
字符串upgrade = "always"参数自动响应1(是的,安装所有),以询问是否也更新这些软件包的依赖关系。
upgrade = "always"
1
2条答案
按热度按时间kcugc4gi1#
如果你想要最小的依赖,那么你可以写一个基于
read.dcf
的 Package 器。我的 Package 器接受一个DESCRIPTION
文件,并返回一个字符向量,列出所描述的包的依赖(可选反向,可选递归)。你可以通过将结果或子集传递给install.packages
来安装(像往常一样)。字符串
我刚刚测试了一下...它似乎做了我想要的...
型
kq0g1dla2#
以下是如何安装DESCRIPTION文件中列出的所有软件包:
字符串
upgrade = "always"
参数自动响应1
(是的,安装所有),以询问是否也更新这些软件包的依赖关系。