Tiempo estimado de lectura < 2 min
A no ser que estemos trabajando en equipo, y que lo tengamos en cuenta, puede ser que no pensemos mucho en el resto de personas y en – como se dice en inglés – la reproductibilidad de nuestros programas.
Cuando uno presenta un programa en sociedad, se deben indicar los requerimientos, bien en el programa o en su documentación. Y, lo cierto, es que en todos los sitios (trabajo, Internet) suele ser así.
Sin embargo, además de eso, ¿por qué no se introduce – si es posible – un trozo de código al comienzo del programa que verifique los requerimientos y, en caso necesario, lanzar las instrucciones necesarias?
Bueno, yo tampoco me he puesto muy purista en esto (no vamos a empezar a medir la memoria del disco y RAM… ¿verdad? Pero, por otro lado, sí que podríamos instalar los componentes necesarios. Ahí va: una función que verifique (y cargue) las librerías necesarias de un programa R. (Otra tontería del autor de este blog…)
[code language=”r”]
f_CompruebaPaquetes <- function (libRequeridas){
# Comprueba si los paquetes "libRequeridas" están instaladas.
# Si no están instaladas, las instala. Después las carga.
print("Comprobando paquetes …");
for (libreria in libRequeridas){
if (!any(libreria %in% installed.packages()[,1])) {
print(paste0("’",libreria,"’ no está instalado. Se intentará instalar a continuación …’"));
install.packages(libreria);
if (!any(libreria %in% installed.packages()[,1])) {
print(paste0("Por algún motivo el paquete no se ha podido instalar. Compruebe la conexión a Internet o el nombre de la librería (‘",libreria,"’)."));
return(libreria);
};
}else{
print(paste0("’",libreria,"’ ya instalado.’"));
};
print(paste0("Cargando ‘",libreria,"’ …’"));
library(package =libreria, character.only = T);
};
print("Paquetes comprobados y cargados.");
return("");
};
# Ejemplo:
print(f_CompruebaPaquetes(c("stringr","RCurl")))
[/code]
La función no tiene gran dificultad: se recorre una colección de nombres de librerías. Si la librería que se está comprobando está instalada, se carga, y si no, se intenta instalar. Después de haberla intentado instalar, se comprueba si está instalada de nuevo; si no es así, es que algo ha ido mal y termina la función devolviendo el nombre del paquete que se estaba procesando.
En más de una ocasión han llegado a mis manos programas que, al ejecutarlos, han fallado debido a que faltaba por instalar/cargar algún paquete. Intentemos ahorrar tiempo a la gente con nuestro trabajo (¿no es eso de lo que se trata, al final?).
¡Ciao!