Charger plusieurs paquets à la fois
Comment puis-je charger un tas de paquets à la fois avec de retaper le besoin commande? J'ai essayé trois approches qui tous crash and burn.
En fait, je cherche à fournir un vecteur de noms de paquets à une fonction qui va charger.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
Vous devez vous connecter pour publier un commentaire.
Plusieurs permutations de vos fonctions proposées pour faire le travail, mais seulement si vous spécifiez le
character.only
argumentTRUE
. Exemple rapide:x
?do.call
dans ma réponse, donc je suis un peu perplexe au sujet de votre réponse.require
et exécuterinstall.packages
si les résultats deFALSE
, etrequire
de nouveau. Veuillez ouvrir une nouvelle question (et, éventuellement, lien ici) si vous obtenez coincé.lapply(x, function(x) {if (!require(x, character.only=T)) {install.packages(x);require(x)}})
pour enregistrer les contrôles préalables et faire installer des trucs sur demande uniquement. Si on spécifie une liste de paquets à charger (et installé si nécessaire) dansx
caractère - tout comme l'OP demandé. Mais il se fait assez longtemps pour développer davantage ce dans un commentaire 🙂lapply
truc natif delibrary()
. Être grand pour être en mesure de dire:library(c("plyr", "umx"))
CRAN paquet pacman que je maintiens (écrit en collaboration avec Dason Kurkiewicz) pouvez accomplir ceci:
Afin que l'utilisateur puisse faire:
et si le paquet est manquant
p_load
la télécharger à partir de CRAN ou Bioconductor.p_load
? Un nom plus descriptif, tel queload_packages
fait l'intention de la fonction de plus en plus clair.p_
. De Plus, nous avons tendance à utiliser la bibliothèque un peu et c'est un supplémentaire de 7 caractères. 7 caractères x ~1000000 temps de la vie d'utilisations de la fonction x .5 secondes par caractère = 3500000 secondes. C'est 58333.33 minutes, 972.2222 heures ou 40.50926 jours d'un programmeur de vie que nous avons donné de nouveau à eux 🙂 Dans tous les cas, notre objectif est de pousser à CRAN par la Feb 1p_
préfixe plutôt douteuse. Si laconisme est le problème, supprimez lep_
préfixe entièrement. En fait, avoir ces préfixes sont déconseillés dans d'autres langues, pour de bonnes raisons (je l'ai dit Hadley ils même en ce qui concerne sonfct_
non-sens dans forcats). C'est surtout vrai puisqu'il est prévu que l'utilisation de th paquet est qualifié d'espace de noms (pacman::
).pacman::
mais il est idiot de croire tout le monde sera d'utiliser un paquet dans la façon dont je le fais. Comme la plupart des choses, il est nécessaire de trouver un compromis. Ici, le compromis est le laconisme vs descriptif vs conflits d'espace de noms. Plus à ce point un changement de ce genre de pause trop de gens du code.Cela devrait faire l'affaire:
(Le plus important est que le
args
argument endo.call(what, args)
doit être une liste --- même si elle n'a qu'un seul élément!)pour quelqu'un qui veut installer et charger des packages simultanément, je suis tombé sur cette fonction dans le lien ci-dessous
https://gist.github.com/stevenworthington/3178163
Une option alternative vient du package
easypackages
. Une fois installé, vous pouvez charger des packages dans la manière la plus intuitive:Le forfait comprend également une fonction pour installer plusieurs paquets:
Référence ici.
library
fonction, désigne le lieu où les paquets sont installés: le package library. Chargement de plusieurs paquets vialibraries
n'a pas de sens. Ayant une fonction distinctepackages
qui fait quelque chose d'autre tout à fait de cette pire. Je sais de nommage est un problème difficile en génie logiciel, mais vraiment. Ces noms sont particulièrement mauvais.libraries
n'a pas de sens. C'est le pluriel delibrary
, etlibrary
charge un seul paquet;libraries
charge une pluralité de paquets. Si vous pensezlibrary
le sens de "charger à partir de votre bibliothèque unique", et d'étendre àlibraries
sens "charger à partir de plusieurs bibliothèques", alors c'est peut-être pas intuitif, mais ce n'est pas mon intention; je serais tout à fait heureux avec le nomlibraries
.Vous pouvez simplement utiliser lubripack paquet et il parfaitement installe de nouveaux paquets et ensuite chargez-les tous dans une seule ligne.
Voici le résultat après l'exécution de code ci-dessus dans RStudio.
Comment Installer le Paquet:
Exécuter le code ci-dessous pour télécharger le paquet et l'installer à partir de GitHub. Nul besoin d'avoir de Compte GitHub.
Bâtiment sur daroczig la solution, si vous ne voulez pas spécifier une liste en entrée, vous pouvez utiliser
... ce qui est plus courte que
J'utilise la fonction suivante:
Cette tente de charger, et s'il ne l'installe et ensuite essayer de le charger à nouveau.
Je pense que le code que @daroczig a fourni peut être améliorée en remplaçant la
require
aveclibrary
et envelopper leslapply
appeler à l'intérieur de lainvisible()
fonction. Ainsi, l'amélioration du code ressemblera à celui-ci:Ce code est améliorée parce que:
library()
est généralement préféré plus derequire()
pour le chargement des paquets parce que le premier donne une erreur si le paquet n'est pas installé alors que le second donne juste un avertissement. En outre,require()
appelslibrary()
, alors pourquoi ne pas utiliserlibrary()
directement!La liste objet retourné et imprimé par le
lapply()
appel n'est pas utile dans ce cas, il est donc logique de faire la sortie d'invisible. Dire que vous l'utilisez R Notebook pour votre travail d'analyse, à l'aide de lainvisible()
fonction supprimer le contenu de la liste d'objets et de prévenir le désordre dans le rendu du fichier notebook.Légère mod de Tyler Rinker est la réponse d'ajouter une case à installer & charge pacman:
J'aime la p_load solution car elle évite de citer!