我知道您可以使用以下语法从CRAN安装软件包:
install.packages(c("Rcpp"), dependencies=TRUE)
您可以使用以下命令从CRAN更新所有这些内容:
update.packages()
另一方面,您可以使用以下命令从GitHub安装软件包(编译它们):
install_github("hadley/tidyr")
如何升级所有GitHub包?
我的意思是不一次重新安装(和编译)它们。类似于update.packages()
的github。
答案 0 :(得分:8)
这对我有用。它遍历库中的所有包,而不仅仅是加载的包。
update_github_pkgs <- function() {
# check/load necessary packages
# devtools package
if (!("package:devtools" %in% search())) {
tryCatch(require(devtools), error = function(x) {warning(x); cat("Cannot load devtools package \n")})
on.exit(detach("package:devtools", unload=TRUE))
}
pkgs <- installed.packages(fields = "RemoteType")
github_pkgs <- pkgs[pkgs[, "RemoteType"] %in% "github", "Package"]
print(github_pkgs)
lapply(github_pkgs, function(pac) {
message("Updating ", pac, " from GitHub...")
repo = packageDescription(pac, fields = "GithubRepo")
username = packageDescription(pac, fields = "GithubUsername")
install_github(repo = paste0(username, "/", repo))
})
}
答案 1 :(得分:6)
library(devtools)
#' Update all github installed packages.
#'
#' This will trash any non-master branch installs, and spend time re-installing
#' packages which are already up-to-date.
update_github <- function() {
pkgs = loadedNamespaces()
print(pkgs)
desc <- lapply(pkgs, packageDescription, lib.loc = NULL)
for (d in desc) {
message("working on ", d$Package)
if (!is.null(d$GithubSHA1)) {
message("Github found")
install_github(repo = d$GithubRepo, username = d$GithubUsername)
}
}
}
# test it:
# install github version of tidyr
install_github("hadley/tidyr")
library(tidyr)
update_github()
如果你有任何比用户/ repo主分支更复杂的github安装,请不要运行它。如果你有很多github安装也要小心,因为这将盲目地重新安装它们,即使是最新的。这可能需要很长时间,如果github主分支不在最佳状态,也可能会破坏工作包。
详细了解devtools R/session_info.r
。
答案 2 :(得分:1)
2019更新:
软件包remotes
(one of the "offspring" of devtools)中的函数update_packages()
现在在从CRAN,GitHub等更新软件包方面做得很好。
您可能需要设置一些环境变量,以使其顺利运行。 The README of the package on GitHub列出了他们的名单。就我而言,这就是我所拥有的:
R_REMOTES_UPGRADE=always
R_REMOTES_NO_ERRORS_FROM_WARNINGS=true
GITHUB_PAT=<my GitHub personal access token>
设置好之后,您要做的就是:
remotes::update_packages()
更新所有软件包。