2010-01-30 13 views
12

Poniższe komendy R zainstaluje wszystkie pakiety Cran:Instalowanie wszystkich pakietów CRAN, które nie są jeszcze zainstalowane?

availablePackages <- available.packages()[,1] 
install.packages(availablePackages) 

i następujące polecenie wyświetli listę wszystkich zainstalowanych pakietów:

installedPackages <- .packages(all.available = TRUE) 

Moje pytanie brzmi: Jak mogę polecić R, aby zainstalować wszystkie Cran pakiety, które nie są jeszcze zainstalowane?

+1

Kolejny prosty przypadek użycia jest utworzenie laptopa do innego analityka, który może pracować w trybie offline. Zamiast próbować przewidzieć, jakie pakiety będą używane, po prostu zainstaluj je wszystkie. Mój dział stosuje to podejście przy konfigurowaniu laptopów analityków. – fmark

+1

'setdiff (litery, litery [5:15])' – baptiste

Odpowiedz

16

Szczerze mówiąc, myślę, że to żmudna praca ... to trwać kilka dni, a nawet tygodni (w zależności od zasobów), ale tutaj jest kod (ja po prostu lubię robić trywialne rzeczy):

# get names of installed packages 
packs <- installed.packages() 
exc <- names(packs[,'Package']) 

# get available package names 
av <- names(available.packages()[,1]) 

# create loooong string 
ins <- av[!av %in% exc] 
install.packages(ins) 

Nadal nie rozumiem, dlaczego to robisz, ale, hej ... niektóre rzeczy po prostu nie mają być ... Co mnie zastanawia najbardziej, to fakt, że już odpowiedziałeś na własne pytanie! Dostałeś to, czego potrzebujesz, i to zależy od ciebie, żeby wszystko połączyć ... Czy nie mamy racji? Czy masz coś innego na myśli?!?

12

1) Dlaczego chcesz to zrobić? Istnieje ponad 3500 (od lutego 2012) z nich?

2) Czy spojrzałeś na pakiet CRAN Task Views i ctv, który umożliwia instalację pakietów z danego zadania?

3) Ty pogrubienie-face pytanie jest proste zapytanie indeksowania można zrobić ręcznie (a poza tym także zobaczyć help(sets))

R> available <- LETTERS     # a simple set 
R> installed <- LETTERS[c(1:10, 15:26)] # a simple subset 
R> available[ ! available %in% installed ] 
[1] "K" "L" "M" "N" 
R> 

EDIT: w odpowiedzi na Kontynuacja:

a) Jeśli pakiet nie przejdzie testu "R CMD check" w systemach Linux i Windows, nie zostanie przesłany do CRAN. Więc ta praca jest skończona.

b) Od samego początku wszystko zależy od twojej pracy. Zrobiliśmy to dla cran2deb, który jest na http://debian.cran.r-project.org (który robi pełny pakiet pakietów Debiana, który jest czymś więcej niż tylko instalacją). Zbudowaliśmy około 2050 z 2150 pakietów. Jest kilka, których nie możemy budować z powodu licencji, kilka nie możemy z powodu brakujących nagłówków lub bibliotek, a kilka nie możemy zbudować, ponieważ potrzebują np. Pakiety BioConductor.

+0

Chcę się upewnić, że mój system ma wszystkie właściwe zależności i testuję to, próbując zbudować cały CRAN :-) Czy CRAN zawiera wiele uszkodzonych pakietów którego powinienem się spodziewać nie zbuduje? – knorv

+0

Jest kilka takich, których powinieneś się nie spodziewać, jeśli nie masz zainstalowanych bibliotek w standardowych miejscach. rgdal na przykład zakłada, że ​​GDAL jest zainstalowany gdzieś, gdzie może go znaleźć skrypt konfiguracyjny. Jeśli masz zainstalowany w niestandardowej lokalizacji, będziesz musiał ręcznie wskazać R CMD INSTALL w odpowiednim miejscu. – Sharpie

+0

@Dirk "Ponad dwa tysiące" pozostaje wiarygodnym oszacowaniem, ale ja, umm, skorzystałem z możliwości zmniejszenia wartości rezydualnej. – Iterator

2

typ to polecenie, a następnie wszystkie pakiety zostaną zainstalowane automatycznie:

 >install.packages(available.packages()[,1]) 
+3

jak to się poprawia w przypadku którejkolwiek z poprzednich odpowiedzi? –

+1

Jeśli to działa, jego cleaner – CodeGuyRoss

+1

Wadą tego podejścia jest to, że sesja może napotkać problem w pewnym momencie i na końcu. Korzystanie z podejścia aL3xa oznacza, że ​​za każdym razem, gdy uruchamiasz kod, ma on mniej pakietów do zainstalowania niż podczas ostatniego uruchomienia. –

0

Przetestowałem to i to działa

availablePackages=available.packages() 
availablePackages<-as.vector(availablePackages[,1]) 
installedPackages=.packages(all.available = TRUE) 
missedPackages<-setdiff(availablePackages, installedPackages) 
for (i in 1:length(missedPackages)) 
{ 
pkgName <- missedPackages[i] 
install.packages(pkgName) 
} 
print("END") 

Pozdrowienia

+0

ile czasu to zajęło? – OganM

Powiązane problemy