web-dev-qa-db-fra.com

Installer un paquet R local avec des dépendances à partir du miroir CRAN

J'ai construit un paquet R, c'est-à-dire que j'ai le fichier mypackage.tar.gz. Ce paquet dépend de plusieurs autres paquets, tous téléchargeables et installables à partir de n’importe quel miroir CRAN.

Maintenant, je veux installer ce paquet sur un système sur lequel les dépendances ne sont pas encore installées, et j'aimerais que les dépendances soient téléchargées et installées automatiquement lorsque j'installe mon paquet.

J'ai essayé:

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

mais il recherche mypackage.tar.gz sur le miroir (et évidemment, il ne le trouve pas), alors que si je mets repos=NULL, il essaie correctement d’installer le fichier de package local (comme documenté), mais il ne détecte évidemment pas les packages de dépendances.

Ma question est donc la suivante: existe-t-il un moyen d'effectuer une installation «mixte» (paquet local avec des dépendances en ligne) ou le seul moyen de le faire est-il d'installer manuellement toutes les dépendances?

37
WoDoSc

Vous pouvez utiliser install à partir du paquet devtools. Il suffit de lancer install("<directory of your package>", dependencies = TRUE). Son aide indique: 

Utilise R CMD INSTALL pour installer le package. Essayez également d'installer des dépendances du paquet à partir de CRAN, si elles ne sont pas déjà installées.

7
Emiel

Si vous avez déjà installé votre paquet local, vous devriez pouvoir utiliser quelques fonctions dans tools pour installer les dépendances à partir de CRAN:

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

Remarque: Vous pouvez transmettre des arguments (tels que repos) de installFoundDepends à install.packages.

Vous pouvez également utiliser l'élément Depends de la sortie pkgDepends pour passer directement à install.packages:

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

UPDATE: Apparemment, il n'est pas possible d'installer un paquet local avec dependencies=FALSE. Cela semble étrange, puisque vous pouvez le faire pour un paquet distant depuis un référentiel. La raison ( en regardant le code source ) est que if(is.null(repos) & missing(contriburl)), l'installation est gérée via des appels système à R CMD INSTALL, qui n'a pas d'argument lié à la dépendance.

5
Thomas

Ici, j'utilise untar() avec devtools::install() et passe dans un répertoire dans lequel l'archive source a été extraite.

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

Si vous souhaitez installer à partir de plusieurs dépôts, vous pouvez en fournir une liste. Par exemple, pour utiliser à la fois Bioconductor et CRAN, vous pouvez exécuter:

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

REMARQUE: Je ne vois pas comment passer directement l'archive à install(), mais cette solution fonctionne dans l'intervalle et ne laisse aucune image de fond car nous extrayons dans un répertoire temp Il semble que install_local() devrait pouvoir prendre une archive, mais j'obtiens une erreur en essayant de le faire.

2
Megatron

Personnellement, j'utilise RStudio qui vous indique les dépendances manquantes. Ensuite, je copie la chaîne dans les arguments du petit script suivant pour changer les symboles "étranges" en classique "(xclip est en train de copier dans le presse-papier [c'est comme pbcopy sur macOS]).

#!/bin/bash
echo $@ | sed 's/‘/"/g' | sed 's/’/"/g' | xclip -selection clipboard

Ensuite, j'utilise simplement install.packages(c(ctrl_v__what_to_install)) et R commence à installer toutes les dépendances. 

NB: rappelez-vous que les deux écrits dans le script ci-dessus sont différents et que la première fois que vous copiez ce script, il est conseillé de copier à nouveau les caractères de guillemets originaux.

0
Garini