2012-06-28 11 views
6

oparciu o odpowiedzi na to pytanie: Elegant way to check for missing packages and install them?Sprawdź zainstalowanych pakietów w R

Używam poniższy kod, żeby upewnić się, że wszystkie pakiety są zainstalowane, kiedy uaktualnić R, lub skonfigurować innych użytkowników:

list.of.packages <- c("RODBC", "reshape2", "plyr") 
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])] 
if(length(new.packages)) install.packages(new.packages) 

umieściłem go w moim .First funkcji w moim .Rprofile, ale kiedy zaczynają się R daje następujący błąd i kontynuuje uruchamiania:

Error in match(x, table, nomatch = 0L) : 
    could not find function "installed.packages" 

Jeśli uruchomię c ode po otrzymaniu polecenia działa dobrze. Jakieś pomysły, dlaczego?

Dzięki!

Odpowiedz

11

Wydaje się, że od czytania ?Startup:

Następnie, jeśli funkcja .First znajduje się na ścieżce wyszukiwania, jest on wykonywany jak .First(). Wreszcie, funkcja .First.sys() w pakiecie podstawowym jest uruchomiona na . Te wywołania wymagają dołączenia domyślnych pakietów określonych przez opcje ("defaultPackages").

Teraz installed.packages jest w utils pakietu, który jest zwykle jednym z pakietów domyślnych. W związku z tym nie jest dostępny w momencie wywołania .First.

Być może należy spróbować wymienić installed.packages na utils::installed.packages?

Jak Josh zauważa poniżej moje oczy odtłuszczonego nad kawałkiem, który rozwiązuje ten problem bezpośrednio, a mianowicie:

Zauważ, że gdy strona i profil użytkownika pliki są pozyskiwane tylko pakiet bazowa jest załadowany, więc obiektów inne pakiety muszą być , o których mowa np utils :: dump.frames lub po jawnym załadowaniu danego pakietu .

+1

Albo (jak opisano nieco wcześniej w '? Startup', można użyć' utils :: installed.packages' lub pierwszy jawnie załadować pakiet z 'require (utils)'. –

+0

@ JoshO'Brien Jinx! – joran

+0

Owe koks! –

Powiązane problemy