¿Cómo puedo cargar un montón de paquetes a la vez sin volver a escribir el comando require una y otra vez? He intentado tres enfoques, todos los cuales se bloquean y se queman.
Básicamente, quiero proporcionar un vector de nombres de paquetes a una función que los cargará.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
x
?lapply
truco nativo alibrary()
. Sé genial para poder decir:library(c("plyr", "umx"))
El paquete CRAN pacman que mantengo (creado con Dason Kurkiewicz) puede lograr esto:
Entonces el usuario podría hacer:
y si falta el paquete,
p_load
lo descargará de CRAN o Bioconductor.fuente
p_load
? Un nombre más descriptivo comoload_packages
hace que la intención de la función sea más clara.p_
. Además, tendemos a usar un poco la biblioteca y eso son 7 caracteres adicionales. 7 caracteres x ~ 1000000 usos de por vida de la función x .5 segundos por carácter = 3500000 segundos. Eso es 58333.33 minutos, 972.2222 horas o 40.50926 días de la vida de un programador que les hemos devuelto :-) En cualquier caso, nuestro objetivo es llegar a CRAN antes del 1 de febrerop_
prefijo es bastante dudosa. Si el problema es la brevedad, elimine elp_
prefijo por completo. De hecho, tener tales prefijos generalmente se desaconseja en otros idiomas por buenas razones (le he dicho a Hadley lo mismo con respecto a susfct_
tonterías en los forcats). Esto es especialmente cierto ya que el uso previsto del paquete es con un espacio de nombres calificado (pacman::
).Esto debería funcionar:
(La clave es que el
args
argumentodo.call(what, args)
debe ser una lista, ¡incluso si solo tiene un único elemento!)fuente
Para alguien que quiere instalar y cargar paquetes simultáneamente, encontré esta función desde este enlace
fuente
Una opción alternativa proviene del paquete
easypackages
. Una vez instalado, puede cargar paquetes de la manera más intuitiva:El paquete también incluye una función para instalar varios paquetes:
La referencia aquí .
fuente
library
función, se refiere a la ubicación donde se instalan los paquetes : la biblioteca de paquetes . Cargar varios paquetes a través delibraries
no tiene sentido. Tener una función separadapackages
que hace otra cosa solo empeora esto. Sé que nombrar es un problema difícil en la ingeniería de software, pero realmente. Estos nombres son particularmente malos.libraries
no tenga sentido. Es el plural delibrary
, ylibrary
carga un solo paquete;libraries
carga una pluralidad de paquetes. Si piensalibrary
que significa "cargar desde su biblioteca única" y lo extiende allibraries
significado de "cargar desde múltiples bibliotecas", entonces tal vez no sea intuitivo, pero esa no es la intención; Estaría bastante contento con el nombrelibraries
.Simplemente puede usar el paquete lubripack e instala perfectamente nuevos paquetes y luego los carga todos en una línea.
Aquí está la salida después de ejecutar el código anterior en RStudio.
Cómo instalar el paquete:
Ejecute el siguiente código para descargar el paquete e instalarlo desde GitHub. No es necesario tener una cuenta de GitHub.
fuente
Basándose en la solución de daroczig, si no desea especificar una lista como entrada, puede usar
... que es más corto que
fuente
Yo uso la siguiente función:
Esto intenta cargar, y si falla se instala y luego intenta cargar nuevamente.
fuente
Creo que el código que ha proporcionado @daroczig se puede mejorar reemplazando
require
conlibrary
y ajustando lalapply
llamada dentro de lainvisible()
función. Entonces, el código mejorado se verá así:Este código se mejora porque:
library()
generalmente se prefiererequire()
a cargar paquetes porque el primero da un error si el paquete no está instalado, mientras que el último solo da una advertencia. Además,require()
llamadaslibrary()
, ¿por qué no usarlaslibrary()
directamente?El objeto de lista devuelto e impreso por la
lapply()
llamada no tiene sentido en este caso, por lo que tiene sentido hacer que la salida sea invisible. Digamos que usa R Notebook para su trabajo de análisis, el uso de lainvisible()
función suprimirá el contenido del objeto de la lista y evitará el desorden en el archivo de cuaderno renderizado.fuente
Ligero mod de la respuesta de Tyler Rinker para agregar un cheque para instalar y cargar pacman:
¡Me gusta la solución p_load porque evita las citas!
fuente