Wie kann ich eine Reihe von Paketen gleichzeitig laden, ohne den Befehl require immer wieder neu einzugeben? Ich habe drei Ansätze ausprobiert, die alle abstürzen und brennen.
Grundsätzlich möchte ich einer Funktion, die sie lädt, einen Vektor mit Paketnamen bereitstellen.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
x
?lapply
nativen Trick hinzugefügt hatlibrary()
. Seien Sie großartig, um sagen zu können:library(c("plyr", "umx"))
Das von mir gepflegte CRAN-Paket pacman (verfasst mit Dason Kurkiewicz) kann dies erreichen:
Der Benutzer könnte also Folgendes tun:
und wenn das Paket fehlt,
p_load
wird es von CRAN oder Bioconductor heruntergeladen.quelle
p_load
? Ein aussagekräftigerer Name wieload_packages
macht die Absicht der Funktion klarer.p_
. Außerdem benutzen wir die Bibliothek ein bisschen und das sind zusätzliche 7 Zeichen. 7 Zeichen x ~ 1000000 Lebenszeitverwendung der Funktion x .5 Sekunden pro Zeichen = 3500000 Sekunden. Das sind 58333,33 Minuten, 972,2222 Stunden oder 40,50926 Tage des Lebens eines Programmierers, die wir ihnen zurückgegeben haben :-) Auf jeden Fall ist es unser Ziel, bis zum 1. Februarp_
Präfix ziemlich zweifelhaft. Wenn es um Knappheit geht, entfernen Sie dasp_
Präfix vollständig. Tatsächlich wird davon abgeraten, solche Präfixe in anderen Sprachen aus guten Gründen zu haben (ich habe Hadley gesagt, dass sie dies auch in Bezug auf seinenfct_
Unsinn bei Forcats tun). Dies gilt insbesondere , da die beabsichtigte Verwendung des Pakets mit einem qualifizierten Namespace (pacman::
) erfolgt.Dies sollte den Trick tun:
(Der Schlüssel Bit ist , dass das
args
Argumentdo.call(what, args)
muss eine Liste sein --- auch wenn es nur ein einziges Element hat!)quelle
Für jemanden, der Pakete gleichzeitig installieren und laden möchte, bin ich über diesen Link auf diese Funktion gestoßen
quelle
Eine alternative Option kommt aus dem Paket
easypackages
. Nach der Installation können Sie Pakete auf intuitivste Weise laden:Das Paket enthält auch eine Funktion zum Installieren mehrerer Pakete:
Referenz hier .
quelle
library
Funktion bezieht sich auf den Speicherort, an dem Pakete installiert werden: die Paketbibliothek . Das Laden mehrerer Pakete überlibraries
macht keinen Sinn. Eine separate Funktionpackages
, die etwas anderes bewirkt, macht dies nur noch schlimmer. Ich weiß, dass das Benennen ein schweres Problem in der Softwareentwicklung ist, aber wirklich. Diese Namen sind besonders schlecht.libraries
keinen Sinn ergibt . Es ist der Plural vonlibrary
undlibrary
lädt ein einzelnes Paket;libraries
lädt mehrere Pakete. Wenn Sie sichlibrary
"Laden aus Ihrer einzelnen Bibliothek" vorstellen und dies auflibraries
"Laden aus mehreren Bibliotheken" erweitern, ist dies möglicherweise nicht intuitiv, aber das ist nicht die Absicht. Ich würde mich sehr über den Namen freuenlibraries
.Sie können einfach das lubripack-Paket verwenden und es installiert ordentlich neue Pakete und lädt dann alle in einer Zeile.
Hier ist die Ausgabe, nachdem Sie den obigen Code in RStudio ausgeführt haben.
So installieren Sie das Paket:
Führen Sie den folgenden Code aus, um das Paket herunterzuladen und von GitHub zu installieren. GitHub-Konto ist nicht erforderlich.
quelle
Aufbauend auf der Lösung von daroczig können Sie eine Liste als Eingabe angeben, die Sie verwenden können
... was kürzer ist als
quelle
Ich benutze die folgende Funktion:
Dies versucht zu laden, und wenn es fehlschlägt, installiert und dann erneut zu laden.
quelle
Ich denke , dass der Code, der @daroczig hat , kann durch den Austausch der verbessert werden bereitgestellt
require
mitlibrary
und das Einwickeln derlapply
Anruf innerhalb derinvisible()
Funktion. Der verbesserte Code sieht also folgendermaßen aus:Dieser Code wurde verbessert, weil:
library()
wird im Allgemeinenrequire()
zum Laden von Paketen bevorzugt, da erstere einen Fehler ausgibt, wenn das Paket nicht installiert ist, während letztere nur eine Warnung ausgibt. Darüber hinausrequire()
Anrufelibrary()
, warum also nicht einfachlibrary()
direkt nutzen !Das vom
lapply()
Aufruf zurückgegebene und gedruckte Listenobjekt ist in diesem Fall nicht aussagekräftig. Daher ist es sinnvoll, die Ausgabe unsichtbar zu machen. Angenommen, Sie verwenden R Notebook für Ihre Analysearbeit. Wenn Sie dieinvisible()
Funktion verwenden, wird der Inhalt des Listenobjekts unterdrückt und die Unordnung in der gerenderten Notebook-Datei verhindert.quelle
Leichte Modifikation von Tyler Rinkers Antwort, um einen Check zum Installieren und Laden von Pacman hinzuzufügen:
Ich mag die p_load-Lösung, weil sie das Zitieren vermeidet!
quelle