Обновите все пакеты от GitHub
Я знаю, что вы можете устанавливать пакеты из CRAN с помощью этого синтаксиса:
install.packages(c("Rcpp"), dependencies=TRUE)
Вы можете обновить их все из CRAN с помощью
update.packages()
С другой стороны, вы можете установить пакеты (их компиляцию) из GitHub с помощью:
install_github("hadley/tidyr")
Как вы можете обновить все пакеты GitHub?
Я имею в виду, не переустанавливая (и компилируя) их по одному. Что-то вроде update.packages()
для github.
Ответы
Ответ 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))
})
}