Подтвердить что ты не робот

Обновите все пакеты от GitHub

Я знаю, что вы можете устанавливать пакеты из CRAN с помощью этого синтаксиса:

install.packages(c("Rcpp"), dependencies=TRUE)

Вы можете обновить их все из CRAN с помощью

update.packages()

С другой стороны, вы можете установить пакеты (их компиляцию) из GitHub с помощью:

install_github("hadley/tidyr")

Как вы можете обновить все пакеты GitHub?

Я имею в виду, не переустанавливая (и компилируя) их по одному. Что-то вроде update.packages() для github.

4b9b3361

Ответ 1

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()

Не запускайте это, если у вас есть какие-либо установки github из чего-либо более сложного, чем главная ветвь пользователя/репо. Также будьте осторожны, если у вас много установок github, так как это будет слепо переустанавливать их все, даже если они актуальны. Это может занять много времени, а также может сломать рабочие пакеты, если ведущие ветки github не находятся в состоянии верхнего уровня.

Посмотрите на devtools R/session_info.r для деталей.

Ответ 2

Это работает для меня. Он проходит через все пакеты в вашей библиотеке, а не только загруженные пакеты.

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))
  })
}