Comment puis-je charger un tas de packages à la fois sans retaper la commande require encore et encore? J'ai essayé trois approches qui se brisent et brûlent.
Fondamentalement, je souhaite fournir un vecteur de noms de packages à une fonction qui les chargera.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
x
?lapply
astuce native àlibrary()
. Soyez génial de pouvoir dire:library(c("plyr", "umx"))
Le paquet CRAN Pacman que je maintiens (créé avec Dason Kurkiewicz) peut accomplir ceci:
Ainsi, l'utilisateur peut faire:
et si le paquet est manquant,
p_load
il le téléchargera depuis CRAN ou Bioconductor.la source
p_load
? Un nom plus descriptif tel queload_packages
rend l'intention de la fonction plus claire.p_
. De plus, nous avons tendance à utiliser un peu la bibliothèque et cela représente 7 caractères supplémentaires. 7 caractères x ~ 1000000 utilisations de la durée de vie de la fonction x 0,5 seconde par caractère = 3500000 secondes. C'est 58333,33 minutes, 972,2222 heures ou 40,50926 jours de la vie d'un programmeur que nous leur avons rendu :-) En tout cas, notre objectif est de pousser au CRAN avant le 1er févrierp_
préfixe plutôt douteuse. Si le problème est la concision, supprimezp_
entièrement le préfixe. En fait, avoir de tels préfixes est généralement déconseillé dans d'autres langues pour de bonnes raisons (j'ai dit à Hadley qu'ilsfct_
étaient pareils en ce qui concerne ses absurdités dans les forcats). Cela est d' autant plus vrai que l'utilisation prévue du package est avec un namespace qualifié (pacman::
).Cela devrait faire l'affaire:
(Le bit clé est que l'
args
argument dansdo.call(what, args)
doit être une liste --- même s'il n'a qu'un seul élément!)la source
Pour quelqu'un qui veut installer et charger des packages simultanément, je suis tombé sur cette fonction à partir de ce lien
la source
Une option alternative vient du package
easypackages
. Une fois installés, vous pouvez charger des packages de la manière la plus intuitive:Le package comprend également une fonction pour installer plusieurs packages:
Référence ici .
la source
library
fonction, fait référence à l'emplacement où les packages sont installés: la bibliothèque de packages . Charger plusieurs paquets vialibraries
n'a aucun sens. Avoir une fonction distinctepackages
qui fait autre chose ne fait qu'empirer les choses. Je sais que la dénomination est un problème difficile en génie logiciel, mais vraiment. Ces noms sont particulièrement mauvais.libraries
n'a aucun sens. C'est le pluriel delibrary
, etlibrary
charge un seul paquet;libraries
charge une pluralité d'emballages. Si vous pensezlibrary
que cela signifie «charger à partir de votre bibliothèque unique», et que vous étendez cela àlibraries
«charger à partir de plusieurs bibliothèques», alors ce n'est peut-être pas intuitif, mais ce n'est pas l'intention; Je serais très content du nomlibraries
.Vous pouvez simplement utiliser le package lubripack et il installe proprement les nouveaux packages, puis les charge tous sur une seule ligne.
Voici la sortie après avoir exécuté le code ci-dessus dans RStudio.
Comment installer le package:
Exécutez le code ci-dessous pour télécharger le package et l'installer à partir de GitHub. Pas besoin d'avoir un compte GitHub.
la source
En vous basant sur la solution de Daroczig, si vous ne souhaitez pas spécifier une liste comme entrée, vous pouvez utiliser
... qui est plus court que
la source
J'utilise la fonction suivante:
Cela tente de se charger, et si cela échoue, installe, puis essayez de charger à nouveau.
la source
Je pense que le code fourni par @daroczig peut être amélioré en remplaçant le
require
parlibrary
et en enveloppant l'lapply
appel dans lainvisible()
fonction. Ainsi, le code amélioré ressemblera à ce qui suit:Ce code est amélioré car:
library()
est généralement préféré aurequire()
chargement des paquets car le premier donne une erreur si le paquet n'est pas installé tandis que le second donne juste un avertissement. De plus, lesrequire()
appelslibrary()
, alors pourquoi ne pas simplement l'utiliserlibrary()
directement!L'objet de liste retourné et imprimé par l'
lapply()
appel n'a pas de sens dans ce cas, il est donc logique de rendre la sortie invisible. Supposons que vous utilisiez R Notebook pour votre travail d'analyse, l'utilisation de lainvisible()
fonction supprimera le contenu de l'objet de liste et empêchera l'encombrement dans le fichier de notebook rendu.la source
Léger mod de la réponse de Tyler Rinker pour ajouter un chèque pour installer et charger pacman:
J'aime la solution p_load car elle évite de citer!
la source