2015-09-12 12 views
17

Wiem, że można instalować pakiety z CRAN z tej składni:Aktualizacja wszystkich pakietów z GitHub

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

można zaktualizować wszystkie z nich z CRAN z:

update.packages() 

Z drugiej strony, ty można zainstalować pakiety (kompilując je) z GitHub za pomocą:

install_github("hadley/tidyr") 

Jak uaktualnić wszystkie pakiety GitHub?

Mam na myśli bez ponownej instalacji (i kompilacji) ich pojedynczo. Coś jak update.packages() dla github.

+7

http://dirk.eddelbuettel.com/code/drat.html – Khashaa

+0

Nie jestem pewien, ale może 'update_packages' od' devtools' może pomóc. – agstudy

+8

Nie można w ogóle, ponieważ repozytorium _GitHub kodu nie jest repozytorium pakietów _R. Stąd potrzeba [drat] (http://dirk.eddelbuettel.com/code/drat.html), na którą @Khashaa już zwrócił uwagę. Podkreślam tutaj moją główną wołowinę z 'install_github()'. –

Odpowiedz

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

Nie uruchamiaj tego, jeśli masz zainstalowane github od czegoś bardziej skomplikowanego niż główny oddział użytkownika/repo. Bądź też ostrożny, jeśli masz dużo instalacji github, ponieważ ślepo je wszystkie zainstalujesz, nawet jeśli są aktualne. Może to zająć dużo czasu, a także może przerwać działanie pakietów, jeśli gałęzie master Github nie są w najlepszej kondycji.

Aby uzyskać szczegółowe informacje, zobacz devtools R/session_info.r.

+0

OK. Dziękuję, Jack. Ale mówi "błąd próbuje skopiować tidyr.dll ..." podczas aktualizacji – skan

+0

Spróbuję z pkgs [! Pkgs == "tidyr"] – skan

+0

Hmmm, działa dla mnie. Czy były jakieś inne informacje o błędzie? Czy miał ten problem w świeżej sesji R? –

6

To działa dla mnie. Przechodzi przez wszystkie pakiety w twojej bibliotece, nie tylko załadowane pakiety.

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)) 
    }) 
} 
Powiązane problemy