Un usuario puede trabajar en muchas PC. Un buen código se ejecuta sin importar en qué PC se esté ejecutando. Suponiendo que uno no quiere depender de los archivos de preferencias y opciones, cuál es la mejor manera de asegurarse de que un paquete esté cargado (e instalado si es necesario).

El comando library es genial, pero el comando require es mucho mejor. Pero incluso require no está haciendo el trabajo.

Activar una reinstalación que no es necesaria (por ejemplo, en R studio) genera un mensaje interesante para reiniciar la sesión de R, y esta es la razón por la que es mejor evitar las instalaciones innecesarias.

Un posible truco A es hacer esto (no escribir el nombre del paquete con demasiada frecuencia)

doInstall <- T;toInstall <- c("downloader");
if(doInstall) install.packages(toInstall);
lapply(toInstall, library, character.only = T)

O un truco peor B sería

if (!require(downloader)) {install.packages("downloader"); require(downloader)}

¿Existe una "forma de 2015" de hacerlo con un comando, algo así como

justdoitall(c("downloader","dplyr"))
r
1
userJT 5 feb. 2015 a las 15:54

2 respuestas

La mejor respuesta

A continuación, se muestra un ejemplo de instalación del código postal del paquete mediante el método pacman .

if (!require("pacman")) install.packages("pacman")
pacman::p_load(zipcode)
2
Tyler Rinker 7 abr. 2015 a las 05:53

Asumiendo que uno no quiere depender de archivos de preferencias y opciones

Eso descarta poner cualquier cosa en .Rprofile o usar paquetes externos, por lo que nos quedamos con la base R para resolver su problema. Si ese es el caso, entonces la respuesta es que no puede hacer esto mucho mejor de lo que ha escrito en su pregunta (prefiero B a A)

Si está dispuesto a doblarse un poco y requiere que el usuario cargue un paquete primero (lo que podría hacerse al inicio usando .Rprofile), hay algunas opciones que hacen exactamente lo que usted desea.

installr::require2 y pacman::p_load hacen lo que les pides. Divulgación: soy un autor / mantenedor de pacman . Estoy de acuerdo con su opinión de que no debemos confiar en opciones o archivos externos, especialmente si planeamos compartir el código. Utilizo pacman casi todos los días (tiene mucho más uso que simplemente instalar / cargar paquetes), pero en su mayor parte, este tipo de funciones deberían tratarse como útiles para uso interactivo, pero si desea portátiles código compartible sin preocuparse por si los paquetes estarán disponibles, tendrá que recurrir a algo similar a lo que tiene en su pregunta.

1
Tyler Rinker 17 feb. 2015 a las 17:31