In meinem Fall wollte ich einen One-Liner, den ich von der Kommandozeile aus ausführen kann (eigentlich über ein Makefile). Hier ist ein Beispiel für die Installation von "VGAM" und "feather", falls sie nicht bereits installiert sind:
R -e 'for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")'
Von R aus wäre es einfach:
for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")
Hier gibt es nichts, was über die bisherigen Lösungen hinausgeht:
- Ich beschränke es auf eine einzige Zeile
- Ich kodiere hart die
repos
Parameter (um Popups zu vermeiden, die nach dem zu verwendenden Mirror fragen)
- Ich mache mir nicht die Mühe, eine Funktion zu definieren, die an anderer Stelle verwendet wird
Beachten Sie auch die wichtigen character.only=TRUE
(ohne sie ist die require
würde versuchen, das Paket zu laden p
).
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?