18 Stimmen

Installieren aller CRAN-Pakete, die noch nicht installiert sind?

Mit den folgenden R-Befehlen werden alle CRAN-Pakete installiert:

availablePackages <- available.packages()[,1]
install.packages(availablePackages)

Und der folgende Befehl listet alle installierten Pakete auf:

installedPackages <- .packages(all.available = TRUE)

Meine Frage ist: Wie kann ich R anweisen, alle CRAN-Pakete zu installieren, die noch nicht installiert sind?

20voto

aL3xa Punkte 33989

Ehrlich gesagt, ich denke, es ist mühsame Arbeit... es würde Tage, sogar Wochen dauern (je nach Ressourcen), aber hier ist der Code (ich genieße es einfach, triviale Dinge zu tun):

# get names of installed packages
packs <- installed.packages()
exc <- names(packs[,'Package'])

# get available package names
av <- names(available.packages()[,1])

# create loooong string
ins <- av[!av %in% exc]
install.packages(ins)

Ich verstehe immer noch nicht, warum du das tust, aber, hey... manche Dinge sollen einfach nicht sein.... Was mich am meisten wundert, ist die Tatsache, dass du deine eigene Frage bereits beantwortet hast! Du hast bekommen, was du brauchst, und es liegt nun an dir, die Dinge zu verbinden... Verstehen wir den Sinn nicht? Hattest du etwas anderes im Sinn?!?

13voto

Dirk Eddelbuettel Punkte 345316

1) Warum wollen Sie das tun? Es gibt über 3500 (Stand: Februar 2012) von ihnen?

2) Haben Sie sich angesehen CRAN-Aufgabenansichten und die ctv Paket, mit dem Sie Pakete aus einer bestimmten Aufgabe installieren können?

3) Die fettgedruckte Frage ist eine einfache Indizierungsabfrage, die Sie von Hand durchführen können (siehe dazu auch help(sets) )

R> available <- LETTERS                  # a simple set
R> installed <- LETTERS[c(1:10, 15:26)]  # a simple subset
R> available[ ! available %in% installed ]
[1] "K" "L" "M" "N"
R> 

Bearbeiten: als Antwort auf Ihr Follow-up:

a) Wenn ein Paket den "R CMD check" unter Linux und Windows nicht besteht, wird es nicht auf CRAN hochgeladen. Diese Aufgabe ist also erledigt.

b) Alle Abhängigkeiten auf Ihrer Seite zu erhalten, ist auch Arbeit, wie Sie sehen werden. Wir haben es für cran2deb gemacht, das sich unter http://debian.cran.r-project.org (das eine komplette Debian-Paketierung durchführt, was mehr als nur eine Installation ist). Wir bekommen etwa 2050 von 2150 Paketen gebaut. Es gibt ein paar, die wir wegen der Lizenz nicht bauen können, ein paar, die wir nicht bauen können, weil Header oder Bibliotheken fehlen und ein paar, die wir nicht bauen können, weil sie z.B. BioConductor-Pakete benötigen.

2voto

Raddad Abooraig Punkte 47

Geben Sie diesen Befehl ein, dann werden alle Pakete automatisch installiert:

install.packages(available.packages()[,1])

1voto

Besser, wenn Sie verwenden:

    check.and.install.Package<-function(package_name){
        if(!package_name%in%installed.packages()){
           install.packages(package_name)
        }
     }

die Funktion aufrufen und prüfen, ob das erforderliche Paket installiert ist:

    check.and.install.Package("pkgName")

0voto

Ich habe dies getestet und es funktioniert

availablePackages=available.packages()
availablePackages<-as.vector(availablePackages[,1])
installedPackages=.packages(all.available = TRUE)
missedPackages<-setdiff(availablePackages, installedPackages)
for (i in 1:length(missedPackages))
{
pkgName <- missedPackages[i]
install.packages(pkgName)
}
print("END")

Mit freundlichen Grüßen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X