从GitHub更新所有包

ska*_*kan 23 r github

我知道您可以使用以下语法从CRAN安装软件包:

install.packages(c("Rcpp"), dependencies=TRUE)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令从CRAN更新所有这些内容:

update.packages()
Run Code Online (Sandbox Code Playgroud)

另一方面,您可以使用以下命令从GitHub安装软件包(编译它们):

install_github("hadley/tidyr")
Run Code Online (Sandbox Code Playgroud)

如何升级所有GitHub包?

我的意思是不一次重新安装(和编译)它们.像update.packages()github 这样的东西.

小智 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))
  })
}
Run Code Online (Sandbox Code Playgroud)


Jac*_*sey 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()
Run Code Online (Sandbox Code Playgroud)

如果你有任何比用户/ repo的主分支更复杂的github安装,请不要运行它.如果你有很多github安装也要小心,因为这将盲目地重新安装它们,即使是最新的.这可能需要很长时间,如果github主分支不在最佳状态,也可能会破坏工作包.

R/session_info.r详细了解一下devtools .


pro*_*tos 5

2019年更新:

update_packages()包中的函数remotesdevtools 的“后代”之一)现在在从 CRAN、GitHub 等更新包方面做得很好。

您可能需要设置一些环境变量以使其顺利工作。GitHub 上的包的 README给出了他们的列表。就我而言,这就是我所拥有的:

R_REMOTES_UPGRADE=always
R_REMOTES_NO_ERRORS_FROM_WARNINGS=true
GITHUB_PAT=<my GitHub personal access token>
Run Code Online (Sandbox Code Playgroud)

设置完成后,您所要做的就是:

remotes::update_packages()
Run Code Online (Sandbox Code Playgroud)

更新您的所有软件包。