Jak mogę załadować kilka pakietów naraz bez ponownego wpisywania żądanego polecenia? Wypróbowałem trzy podejścia, z których wszystkie ulegają awarii i spalają się.
Zasadniczo chcę dostarczyć wektor nazw pakietów do funkcji, która je załaduje.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
x
?lapply
sztuczkę natywną dlalibrary()
. Byłoby wspaniale móc powiedzieć:library(c("plyr", "umx"))
Pakiet CRAN pacman, który utrzymuję (którego autorem jest Dason Kurkiewicz) może to osiągnąć:
Więc użytkownik może zrobić:
a jeśli brakuje pakietu
p_load
, pobierze go z CRAN lub Bioconductor.źródło
p_load
? Bardziej opisowa nazwa, na przykładload_packages
bardziej zrozumiała intencja funkcji.p_
. Poza tym zwykle używamy biblioteki, a to dodatkowe 7 znaków. 7 znaków x ~ 1000000 żywotność wykorzystania funkcji x. 5 sekund na znak = 3500000 sekund. To 58333,33 minuty, 972,2222 godziny lub 40,50926 dni życia programisty, które im oddaliśmy :-) W każdym razie naszym celem jest przejście do CRAN do 1 lutegop_
przedrostka jest raczej wątpliwe. Jeśli problemem jest zwięzłość,p_
całkowicie usuń przedrostek. W rzeczywistości, używanie takich przedrostków jest generalnie odradzane w innych językach zfct_
ważnych powodów (powiedziałem Hadleyowi, że to samo w odniesieniu do jego bzdur w forcats). Jest to szczególnie ważne, ponieważ zamierzone użycie tego pakietu dotyczy kwalifikowanej przestrzeni nazw (pacman::
).To powinno załatwić sprawę:
(Kluczowym bitem jest to, że
args
argument wdo.call(what, args)
musi być listą --- nawet jeśli ma tylko jeden element!)źródło
Dla kogoś, kto chce instalować i ładować pakiety jednocześnie, natrafiłem na tę funkcję z tego linku
źródło
Alternatywna opcja pochodzi z pakietu
easypackages
. Po zainstalowaniu możesz ładować pakiety w najbardziej intuicyjny sposób:Pakiet zawiera również funkcję instalowania kilku pakietów:
Odniesienie tutaj .
źródło
library
funkcji odnosi się do lokalizacji, w której są instalowane pakiety: biblioteki pakietów . Ładowanie kilku pakietów przezlibraries
nie ma sensu. Posiadanie oddzielnej funkcji,packages
która robi coś innego, tylko pogarsza sytuację. Wiem, że nazewnictwo to trudny problem w inżynierii oprogramowania, ale tak naprawdę. Te nazwiska są szczególnie złe.libraries
nie ma sensu. Jest to liczba mnogalibrary
ilibrary
ładuje pojedynczy pakiet;libraries
ładuje wiele pakietów. Jeśli myślisz olibrary
znaczeniu „ładuj z jednej biblioteki” i rozszerzasz to nalibraries
„ładuj z wielu bibliotek”, to być może jest to nieintuicyjne, ale nie o to chodzi; Byłbym bardzo zadowolony z nazwylibraries
.Możesz po prostu użyć pakietu lubripack i starannie zainstaluje nowe pakiety, a następnie załaduje je wszystkie w jednej linii.
Oto dane wyjściowe po uruchomieniu powyższego kodu w RStudio.
Jak zainstalować pakiet:
Uruchom poniższy kod, aby pobrać pakiet i zainstalować go z GitHub. Nie musisz mieć konta GitHub.
źródło
Opierając się na rozwiązaniu darocziga, jeśli nie chcesz określać listy jako danych wejściowych, których możesz użyć
... który jest krótszy niż
źródło
Używam następującej funkcji:
Próbuje załadować, a jeśli się nie powiedzie, instaluje się, a następnie próbuje załadować ponownie.
źródło
Myślę, że kod, który @daroczig zapewnił można poprawić poprzez zastąpienie
require
zelibrary
i owijanialapply
połączenia wewnątrzinvisible()
funkcji. Tak więc ulepszony kod będzie wyglądał następująco:Ten kod jest ulepszony, ponieważ:
library()
jest generalnie preferowanyrequire()
zamiast ładowania pakietów, ponieważ pierwszy wyświetla błąd, jeśli pakiet nie jest zainstalowany, podczas gdy drugi wyświetla tylko ostrzeżenie. Co więcej,require()
połączenialibrary()
, więc dlaczego nie używaćlibrary()
bezpośrednio!Obiekt listy zwrócony i wypisany przez
lapply()
wywołanie nie ma w tym przypadku znaczenia, więc sensowne jest uczynienie wyjścia niewidocznym. Załóżmy, że używasz R Notebook do pracy analitycznej, użycie tejinvisible()
funkcji spowoduje wygaszenie zawartości obiektu listy i uniknięcie bałaganu w renderowanym pliku notatnika.źródło
Nieznaczny mod odpowiedzi Tylera Rinkera, aby dodać czek, aby zainstalować i załadować pacman:
Podoba mi się rozwiązanie p_load, ponieważ unika cytowania!
źródło