Librerías de R: instalación, desinstalación y actualización

Última modificación por admin el 2020/05/23 18:06

Gran parte de la popularidad de R se debe a las más de 9000 librerías de funciones (´packages´ o paquetes) disponibles de forma gratuita, y que en la gran mayoría de los casos están implementadas por expertos. La mayor parte de los análisis requieren de la instalación de uno o más paquetes aparte de los que vienen por defecto con la instalación de R. Una vez se ha instalado un paquete, no es preciso volver a instalarlo a no ser que queramos actualizarlo con otra versión mas moderna del mismo. La lista de paquetes se encuentra aquí:

https://cran.r-project.org/web/packages/available_packages_by_name.html

  1. Instalación de librerías de R (´packages´)
    1. ¿Que repositorio CRAN es el mejor?
    2. ¿Qué diferencia hay entre library() y require()?
  2. Desinstalación de librerías
  3. Actualización de librerías

Instalación de librerías de R (´packages´)

Ejemplo de instalación de la librería RMySQL (externa a la distribución estándar de R) alojada en cualquiera de los repositorios CRAN (The Comprehensive R Archive Network) distribuídos por todo el mundo:

> install.packages("RMySQL",dependencies=TRUE)

La opción dependencies=TRUE comprueba que cualquier otro paquete del que dependa el paquete a instalar esté instalado, y si no lo instala también. A  continuación el sistema pedirá seleccionar un servidor CRAN de descarga o ´mirror´)

También se puede especificar el servidor de descarga:

> install.packages("RMySQL",dependencies=TRUE, repos='http://cran.us.r-project.org')

Y también se pueden instalar librerías que se encuentren en internet pero alojadas fuera de los repositorios CRAN.

> install.packages("bigmemory",repos="http://R-Forge.R-project.org")

Una vez se instala una librería es preciso ´cargarla´para poder utilizar todas las funciones que contiene:

> library(RMySQL)

Loading required package: DBI

Para saber en que lugar del disco duro están instaladas las librerias:

> .libPaths()

¿Que repositorio CRAN es el mejor?

El Comprehensive R Archive Network (CRAN), es decir el universo de R, se encuentra replicado por todo el mundo a través de "mirrors" (https://cran.r-project.org/mirrors.html), en los cuales están disponibles todas las versiones de R, así como todos los paquetes oficiales. A la hora de elegir un CRAN mirror para descargar un paquete, ¿cuál es el mejor?

La respuesta rápida es que normalmente Bélgica y Austria suelen ir muy bien.

La respuesta más elaborada es que el status de cada mirror varía (https://cran.r-project.org/mirmon_report.html) y por lo tanto no hay ninguno que sea mejor que los demás el 100% de las veces, aunque hay algunos que suelen ser más lentos que otros. Además, la velocidad de descarga de un paquete también depende de la velocidad de tu propia conexión a internet. Aquí les dejo el código de una función con la que mirar la velocidad de descarga de cada uno de los mirrors en tiempo real:

> cronometro <- function(ms = getCRANmirrors(all = FALSE, local.only = TRUE)){

    dest <- c("temp.txt")

    nms = dim(ms)[1]
    ms$t = rep(NA,nms)

   for(i in 1:nms){
   
        m = ms[i,]
        url = paste(m$URL,"src/base/NEWS",sep="")
        t = try(system.time(download.file(url,dest),gcFirst=TRUE))
   
       if(file.exists(dest)){
   
               file.remove(dest)
                ms$t[i]=t['elapsed']
                }
       else{ ms$t[i]=NA}
        }

   print(ms)
    }

> CRANtimes <- cronometro()

¿Qué diferencia hay entre library() y require()?

En principio debemos llamar a library() para cargar un paquete que se ha instalado previamente con install.packages():

> install.packages("ggplot2",dependencies=TRUE)

> library(ggplot2)

Ejecutando library() R tiene el paquete ggplot2 cargado en memoria de forma selectiva (solo se carga en memoria lo que se necesita usar). Una vez se ha instalado un paquete con install.packages(), si sales de R y vuelves a entrar y haces library(ggplot2), veras que ggplot2 sigue ahí.

Luego require() es una funcion que a su vez llama a library(), asi que el efecto final si el paquete está instalado es el mismo. La diferencia es que require() te devuelve un valor lógico para informar de si una función ha sido instalada o no, y esto sirve para usar condicionales en el código que digan por ejemplo que todo el programa sigue para adelante si una biblioteca determinada se ha cargado debidamente. Es como un puesto de control de seguridad. Por ejemplo, el siguiente código te da un aviso si el paquete elias_funcion no se puede instalar, pero aún así es solo un aviso y el programa sigue para adelante en cualquier caso, y en este caso la instalación incorrecta de elias_funcion no es absolutamente necesaria para el curso del programa. En resumen: a no ser que tengas que justificar el uso racional de require(), usa siempre library().

> if (require('elias.funcion')) {
>            di_que_se_instalo_bien()
>             }
>  else {
>      warning('La funcion de Elias no se pudo instalar')
>      }

Desinstalación de librerías

> remove.packages("RMySQL")

Nota: si se ha especificado previamente dónde se ha instalado una librería determinada (sin ser, claro, la instalación por defecto), entonces también se puede especificar la desinstalación de ésta:

remove.packages ("RMySQL","/diego/R/librerias/2017/")

Actualización de librerías

old.packages() averigua si existen librerías de una versión mas reciente que la que tenemos instalada:

> old.packages("RMySQL")

NULL

update.packages() descarga e instala las últimas versiones de las librerías que indicamos:

> update.packages("RMySQL")

El siguiente código saca una lista de todas las librerías instaladas por el usuario, y sus versiones:

> ip <- as.data.frame(installed.packages()[,c(1,3:4)])

> rownames(ip) <- NULL

> ip <- ip[is.na(ip$Priority),1:2,drop=FALSE]

> print(ip, row.names=FALSE)
Etiquetas:
Creado por admin el 2016/07/14 05:10