Charger plusieurs paquets à la fois

Comment puis-je charger plusieurs paquets à la fois sans avoir à ressaisir la commande obligatoire? J’ai essayé trois approches qui crachent et brûlent toutes.

Fondamentalement, je veux fournir un vecteur de noms de paquets à une fonction qui les chargera.

x<-c("plyr", "psych", "tm") require(x) lapply(x, require) do.call("require", x) 

    Plusieurs permutations de vos fonctions proposées fonctionnent, mais uniquement si vous spécifiez l’argument character.only comme étant TRUE . Exemple rapide:

     lapply(x, require, character.only = TRUE) 

    Le paquet pacman que je gère (créé avec Dason Kurkiewicz) peut accomplir ceci:

    Ainsi, l’utilisateur pourrait faire:

     ## install.packages("pacman") pacman::p_load(dplyr, psych, tm) 

    et si le paquet manque, p_load le téléchargera depuis CRAN ou Bioconductor.

    Cela devrait faire l’affaire:

     lapply(x, FUN = function(X) { do.call("require", list(X)) }) 

    (Le bit clé est que l’argument args dans do.call(what, args) doit être une liste — même s’il ne comporte qu’un seul élément!)

    pour quelqu’un qui veut installer et charger des paquets simultanément, je suis tombé sur cette fonction dans le lien ci-dessous https://gist.github.com/stevenworthington/3178163

     # ipak function: install and load multiple R packages. # check to see if packages are installed. Install them if they are not, then load them into the R session. ipak <- function(pkg){ new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])] if (length(new.pkg)) install.packages(new.pkg, dependencies = TRUE) sapply(pkg, require, character.only = TRUE) } # usage packages <- c("ggplot2", "plyr", "reshape2", "RColorBrewer", "scales", "grid") ipak(packages) 

    Une option alternative vient du paquet easypackages . Une fois installé, vous pouvez charger les packages de la manière la plus intuitive:

     libraries("plyr", "psych", "tm") 

    Le package comprend également une fonction pour installer plusieurs packages:

     packages("plyr", "psych", "tm") 

    Référence ici .

    Vous pouvez simplement utiliser le paquet lubripack et il installe soigneusement de nouveaux paquets, puis les charge tous en une seule ligne.

     lubripack("plyr", "psych", "tm") 

    Voici la sortie après avoir exécuté au-dessus du code dans RStudio.

    entrer la description de l'image ici

    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.

     library(devtools) install_github("espanta/lubripack") 

    En vous basant sur la solution de daroczig, si vous ne souhaitez pas spécifier de liste comme entrée, vous pouvez utiliser

     # Foo mLoad <- function(...) { sapply(sapply(match.call(), as.character)[-1], require, character.only = TRUE) } # Example mLoad(plyr, dplyr, data.table) 

    ... ce qui est plus court que

     lapply(list('plyr', 'dplyr', 'data.table'), require, character.only = TRUE) 

    J’utilise la fonction suivante:

     mrip <- function(..., install = TRUE){ reqFun <- function(pack) { if(!suppressWarnings(suppressMessages(require(pack, character.only = TRUE)))) { message(paste0("unable to load package ", pack, ": attempting to download & then load")) install.packages(pack) require(pack, character.only = TRUE) } } lapply(..., reqFun) } 

    Cela essaie de se charger et s’il échoue, s’installe, puis essaie de charger à nouveau.