it-swarm.com.de

Installieren Sie ein lokales R-Paket mit Abhängigkeiten vom CRAN-Spiegel

Ich habe ein R-Paket erstellt, d. H. Ich habe die Datei mypackage.tar.gz. Dieses Paket hängt von mehreren anderen Paketen ab, die von einem beliebigen CRAN-Spiegel heruntergeladen und installiert werden können.

Jetzt möchte ich dieses Paket auf einem System installieren, auf dem die Abhängigkeiten noch nicht installiert sind, und ich möchte, dass die Abhängigkeiten automatisch heruntergeladen und installiert werden, wenn ich mein Paket installiere.

Ich habe es versucht:

install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")

es sucht jedoch nach mypackage.tar.gz auf dem Spiegel (und findet es offensichtlich nicht). Wenn ich repos=NULL setze, versucht es korrekt, die lokale Paketdatei (wie dokumentiert) zu installieren, aber es findet offensichtlich keine Abhängigkeiten-Pakete.

Meine Frage ist also: Gibt es eine Möglichkeit, eine "gemischte" Installation durchzuführen (lokales Paket mit Online-Abhängigkeiten), oder die einzige Möglichkeit, alle Abhängigkeiten manuell zu installieren?

37
WoDoSc

Sie können install aus dem devtools-Paket verwenden. Führen Sie einfach install("<directory of your package>", dependencies = TRUE) aus. Ihre Hilfe sagt: 

Verwendet R CMD INSTALL zum Installieren des Pakets. Will auch versuchen, Abhängigkeiten des Pakets von CRAN zu installieren, falls diese noch nicht installiert sind.

7
Emiel

Wenn Sie Ihr lokales Paket bereits installiert haben, sollten Sie in tools ein paar Funktionen verwenden können, um die Abhängigkeiten von CRAN zu installieren:

library('tools')
installFoundDepends(pkgDepends('mypackage', local = FALSE)$Found)

Hinweis: Sie können Argumente (wie repos) über installFoundDepends an install.packages übergeben.

Sie können auch das Element Depends aus der Ausgabe von pkgDepends verwenden, um direkt an install.packages zu übergeben:

install.packages(pkgDepends('mypackage')$Depends)

UPDATE: Offenbar ist es nicht möglich, ein lokales Paket mit dependencies=FALSE zu installieren. Dies erscheint merkwürdig, da Sie dies für ein Remote-Paket aus einem Repository tun können. Der Grund ( beim Betrachten des Quellcodes ) ist, dass if(is.null(repos) & missing(contriburl)) die Installation über Systemaufrufe nach R CMD INSTALL erfolgt, die keine abhängigkeitsbezogenen Argumente haben.

5
Thomas

Hier verwende ich untar() mit devtools::install() und übergebe ein Verzeichnis, in das der Quell-Tarball extrahiert wurde.

d <- tempdir()
untar("mypackage.tar.gz", compressed="gzip", exdir=d)
devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                  repos="https://cloud.r-project.org/")

Wenn Sie von mehreren Repos installieren möchten, können Sie eine Liste davon bereitstellen. Um beispielsweise Bioconductor und CRAN zu verwenden, können Sie Folgendes ausführen:

 devtools::install(file.path(d, "mypackage"), dependencies=TRUE,
                   repos=BiocInstaller::biocinstallRepos())

HINWEIS: Ich kann nicht herausfinden, wie der Tarball direkt an install() übergeben wird. Diese Lösung funktioniert jedoch in der Zwischenzeit und hinterlässt kein Durcheinander, da wir in ein temporäres Verzeichnis extrahieren. Es scheint, dass install_local() in der Lage sein sollte, ein Tarball zu erstellen, aber ich bekomme eine Fehlermeldung, wenn ich es versuche.

2
Megatron

Ich persönlich benutze RStudio, das Ihnen sagt, welche Abhängigkeiten fehlen. Dann kopiere ich den String in die Argumente des folgenden kleinen Skripts, um die 'seltsamen' Symbole in klassischer Form zu ändern "(xclip kopiert in die Zwischenablage [es ist wie pbcopy auf macOS]).

#!/bin/bash
echo [email protected] | sed 's/‘/"/g' | sed 's/’/"/g' | xclip -selection clipboard

Dann benutze ich einfach install.packages(c(ctrl_v__what_to_install)) und R startet, um alle Abhängigkeiten zu installieren. 

Hinweis: Denken Sie daran, dass die beiden , die im obigen Skript geschrieben wurden, unterschiedlich sind. Wenn Sie dieses Skript zum ersten Mal kopieren, empfiehlt es sich, die ursprünglichen Anführungszeichen erneut zu kopieren.

0
Garini