Was Ihr Hauptziel betrifft, "Bibliotheken zu installieren, die sie noch nicht haben. " und unabhängig von der Verwendung von " instllaed.packages() ". Die folgende Funktion maskiert die ursprüngliche Funktion von require. Sie versucht, das benannte Paket "x" zu laden und zu prüfen, wenn es nicht installiert ist, es direkt zu installieren, einschließlich der Abhängigkeiten, und es schließlich normal zu laden. Sie benennen den Funktionsnamen von "require" in "library" um, um die Integrität zu wahren. Die einzige Einschränkung ist, dass Paketnamen in Anführungszeichen gesetzt werden sollten.
require <- function(x) {
if (!base::require(x, character.only = TRUE)) {
install.packages(x, dep = TRUE) ;
base::require(x, character.only = TRUE)
}
}
Sie können also ein Paket auf die altmodische Weise von R laden und installieren. require ("ggplot2") require ("Rcpp")
1 Stimmen
@krlmlr Was ist mit der akzeptierten Antwort, die nicht mehr aktuell ist und überarbeitet werden muss? Bei mir funktioniert es (für ein paar schnelle Tests) unter
R version 3.0.2 (2013-09-25) x86_64-w64-mingw32/x64 (64-bit)
.1 Stimmen
@BrianDiggs: Es sind mindestens drei Pakete aufgetaucht, die sich mit diesem Problem befassen, nur auf eines wird unten verwiesen. Gibt es noch mehr - das ist die Frage.
3 Stimmen
@krlmlr Es scheint eine Art ironisches Huhn-Ei-Problem zu geben, wenn man ein Paket verwendet, um sicherzustellen, dass (andere) notwendige Pakete haben. Aber es ist sicher wert, dass jemand, der sich damit auskennt, eine Antwort schreibt.
2 Stimmen
@BrianDiggs: Das Bootstrapping dieses Installationsprüfungspakets ist ein notwendiges Ärgernis, aber ein kleines. Es sei denn, natürlich, die Funktionalität findet ihren Weg in
base
... ;-)1 Stimmen
Wenn man von Node.js kommt, ist es wahnsinnig, wie schwer das ist. Wie ist dies nicht eine erstklassige Funktion der Sprache?