Paquetes

Los paquetes en R son colecciones de funciones y conjunto de datos desarrollados por la comunidad. Estos incrementan la potencialidad de R mejorando las funcionalidades base en R, o añadiendo de nuevas. Por ejemplo, en el campo de Ciencia de los Datos cuando trabajamos con data.frames, probablemente usaremos los paquetes dplyr o data.table, dos de los paquetes mas populares en la comunidad.

Supongamos que, deseamos realizar un procesamiento de lenguaje natural de textos en Coreano, extrayendo datos meteorológicos desde Internet, con toda seguridad existen paquetes en R para efectuar el análisis. Actualmente, el repositorio oficial CRAN recoge cerca de 10.000 paquetes publicados y, además existen muchos mas publicados en Internet.

Objetivos

Después de leer este capítulo, deberíamos:

¿Qué es un Paquete?

Antes de examinar que son los paquetes, permitidme introducir algunas definiciones. Un paquete es el modo apropiado de organizar nuestro trabajo, si lo que deseamos es compartirlo con otros usuarios. Típicamente, un paquete incluye código (no solamente código R), documentación para el uso del paquete y funciones, y conjuntos de datos.

La información básica sobre un paquete es proporcionada en el archivo DESCRIPTION, en el que encontraremos que utilidad tiene el paquete, el autor, la versión, fecha, tipo de licencia y las dependencias del paquete.

No sólo encontraremos el archivo DESCRIPTION en repositorios como CRAN sino también podemos acceder a la descripción del paquete desde R con la función packageDescription("package"), mediante la documentación del paquete con la ayuda de help(package = "stats") o en línea (del inglés, online) en el repositorio del paquete.

Por ejemplo, para acceder a la documentación del paquete stats lo haríamos del siguiente modo:

packageDescription("stats")
help(package = "stats")

¿Qué son los Repositorios?

Un repositorio es el lugar dónde están alojados los paquetes y desde el cuál podemos descargarlos. Aunque nosotros o nuestra organización disponga de un repositorio local, usualmente los paquetes son accesible online para todo el mundo. Los repositorios mas populares de paquetes R son:

  • CRAN: el cual es el repositorio oficial compuesto de un conjunto de servidores web y ftp mantenidos por la comunidad R a lo largo de todo el mundo. Está coordinado por la fundación R, y para que un paquete pueda ser publicado en el mismo, necesita pasar por diferentes pruebas para asegurar que el paquete cumple con las políticas de CRAN. Podemos encontrar mas detalles al respecto en el siguiente enlace.

  • Bioconductor: se trata de un repositorio específico para bioinformática. Como CRAN, tiene sus propias políticas de publicaciones y procesos de revisión, disponiendo de una comunidad muy activa que proporciona numerosas conferencias y encuentros a lo largo del año.

  • Github: a pesar que no es específico para R, github es con toda seguridad el repositorio mas popular para la publicación de proyectos open source (del inglés, código abierto). Su popularidad procede del espacio ilimitado que proporciona para el alojamiento de proyectos open source, la integración con git (un software de control de versiones) y, la facilidad de compartir y colaborar con otras personas. Se podría objetar que a pesar de que no proporciona procesos de control, sin embargo, será uno de los repositorios que utilicemos con más frecuencia siempre y cuándo conozcamos la persona/s que publica el paquete.

¿Cómo Instalar un Paquete R?

Instalación de Paquetes desde Cran

La forma de instalar un paquete R depende de dónde este localizado. Con esto queremos decir que, dependerá del repositorio en dónde este publicado. La forma mas común es usar el repositorio CRAN, sirva de ejemplo la siguiente instrucción para la instalación del paquete vioplot:

install.packages("vioplot")

Después de ejecutar la instrucción anterior recibiremos una serie de mensajes en nuestra pantalla. Esto depende del sistema operativo que usemos, las dependencias y si el paquete es instalado correctamente.

Pasemos a analizar la salida por pantalla de la instalación de vioplot, algunos de los mensajes que podemos encontrarnos son los siguientes:

Directorio instalación
Figura1 - Directorio instalación

El mensaje anterior nos indica el directorio donde será instalado nuestro paquete, podemos indicar un directorio diferente mediante el parámetro lib.

Origen y tamaño del paquete
Figura2 - Origen y tamaño del paquete

La información previa nos indica el origen y el tamaño del paquete. Obviamente dependerá del servidor espejo CRAN que hayamos seleccionado.

Mensajes de instalación
Figura3 - Mensajes de instalación

Estos son los mensajes de la instalación, el código fuente, ayuda, tests y finalmente un mensaje indicando que la instalación se ha realizado satisfactoriamente.

Directorio temporal
Figura4 - Directorio temporal

La última pieza de información nos indica en que directorio se encuentran los archivos originales del paquete. Esta información no es relevante para el uso del paquete, puesto que estos son copiados por defecto en una carpeta temporal.

Hay que mencionar, además que si deseamos instalar mas de un paquete a la vez, tan sólo tenemos que pasar como primer argumento a la funcióninstall.packages() un vector de caracteres:

install.packages("vioplot", "MASS")

Instalación de Paquetes desde Servidores Espejo de CRAN

Como hemos mencionado CRAN es una red de servidores (cada uno de ellos conocidos como "mirror", del inglés espejo), así pues tenemos la posibilidad de especificar el servidor que deseamos utilizar. En RStudio, el mirror será seleccionado por defecto.

Ahora bien, también tenemos la posibilidad de seleccionar el mirror mediante la función chooseCRANmirror(), o directamente dentro de la función install.packages() por medio del argumento repos. En el siguiente enlace o con la ayuda de la función getCRANmirrors() podemos obtener una lista de los mirros disponibles.

El siguiente ejemplo sirve para usar el mirror de la Red Nacional Española de Investigación (Madrid):

install.packages("vioplot", repos = "https://cran.rediris.es/")

Instalación de Paquetes Bioconductor

En el caso de Bioconductor, el modo estandar de instalar un paquete es ejecutar el siguiente script:

source("https://bioconductor.org/biocLite.R")

La instrucción anterior instalará en nuestro equipo las funciones necesarias para la instalación de paquetes bioconductor, como por ejemplo la función biocLite(). Si deseamos instalar los paquetes básicos de Biocondutor, podemos hacerlo de la manera siguiente:

biocLite()

No obstante, si solamente estamos interesados en uno o varios paquetes en particular, podemos hacerlo como se muestra a continuación:

biocLite(c("GenomicFeatures", "AnnotationDbi"))

Instalación de Paquetes con devtools

Como hemos visto hasta ahora, cada repositorio tiene su forma particular de instalar un paquete, en el caso de que regularmente utilicemos diferentes fuentes en la instalación de nuestros paquetes este método puede llegar a convertirse en una labor un poco pesada. Un modo mas eficiente es mediante el uso del paquete devtools que nos simplificará esta tarea, puesto que contiene funciones especificas para cada repositorio, incluyendo CRAN.

En primer lugar, tendremos que instalar el paquete devtools como hemos visto en un apartado anterior:

install.packages("devtools")

Una vez que tenemos instalado devtools, haremos uso de las funciones para la instalación de otros paquetes. Las opciones son las siguientes:

  • install_bioc() desde Bioconductor,
  • install_bitbucket() desde Bitbucket,
  • install_cran() desde CRAN,
  • install_git()desde un repositorio git,
  • install_github() desde GitHub,
  • install_local() desde un archivo alojado en nuestro equipo,
  • install_svn() desde un repositorio SVN,
  • install_url() desde una URL, y
  • install_version() para una versión específica de un paquete de CRAN.

Por ejemplo, para instalar el paquete babynames desde su repositorio github podemos hacerlo como mostramos a continuación:

devtools::install_github("hadley/babynames")

Actualizar, Eliminar y Comprobar Paquetes Instalados

En esta sección, encontraremos unas pocas funciones que nos permitirán la gestión de la colección de paquetes instalados en nuestro equipo.

  • Para comprobar que paquetes tenemos instalados en nuestro equipo, usaremos:
installed.packages()
  • Si nuestro objetivo es eliminar un paquete, podemos hacerlo como en el siguiente ejemplo:
remove.packages("vioplot")
  • Para comprobar que paquetes necesitan ser actualizados usaremos:
old.packages()
  • A su vez para actualizar todos los paquetes lo haremos mediante una llamada a la función:
update.packages()
  • Sin embargo, para actualizar un solo paquete, usaremos de nuevo la instrucción:
install.packages("vioplot")

Interfaces Gráficas para la Instalación de Paquetes

En RStudio en Tools -> Install Package se nos abrirá un cuadro de dialogo para introducir el paquete que deseamos instalar:

Instalación Paquetes RStudio
Figura5 - Instalación Paquetes RStudio

Carga de Paquetes

Una vez tenemos instalado un paquete, estamos en disposición de hacer uso de sus funciones. Si tan solo necesitamos hacer un uso esporádico de unas pocas funciones o datos del paquete podemos acceder con la notación nombrepaquete::nombrefuncion(). Por ejemplo, siguiendo con el ejemplo anterior del paquete babynames, para explorar uno de sus datasets podemos hacer uso de la siguiente instrucción:

babynames::births
## # A tibble: 119 x 2
##     year  births
##    <int>   <int>
##  1  1909 2718000
##  2  1910 2777000
##  3  1911 2809000
##  4  1912 2840000
##  5  1913 2869000
##  6  1914 2966000
##  7  1915 2965000
##  8  1916 2964000
##  9  1917 2944000
## 10  1918 2948000
## # ... with 109 more rows

RECUERDA que para acceder a las funciones y conjuntos de datos que contiene un paquete, podemos hacerlo mediante:

help(package = "babynames")

Por otro lado, si hacemos un uso intensivo de un paquete, la forma mas eficiente de trabajar es cargándolo en memoria. Esto lo conseguiremos mediante el uso de la función library().

library(babynames)

Después de cargar el paquete en memoria, ya no será necesario hacer uso de la notación nombrepaquete::funcion(), y podremos hacer uso de sus funciones y datos como cualquier paquete base de R:

births
## # A tibble: 119 x 2
##     year  births
##    <int>   <int>
##  1  1909 2718000
##  2  1910 2777000
##  3  1911 2809000
##  4  1912 2840000
##  5  1913 2869000
##  6  1914 2966000
##  7  1915 2965000
##  8  1916 2964000
##  9  1917 2944000
## 10  1918 2948000
## # ... with 109 more rows

NOTA: que el argumento de la función install.packages() es un vector de tipo carácter y requiere de los nombres de los paquetes entrecomillados, mientras que la función library() acepta tanto un vector de tipo carácter como el nombre sin comillas.

De manera semejante, podemos hacer uso de la función require() para cargar un paquete en memoria, sin embargo la diferencia es que no lanzará un error si el paquete no está instalado. Es por eso, que recomendamos hacer uso de esta función con precaución.

Cómo Cargar Varios Paquetes al mismo Tiempo

A pesar de que podemos pasar como argumento un vector de caracteres a la función install.packages() para instalar varios paquetes de una sola vez, en el caso de la función library(), esto no es posible.

Cómo Descargar un Paquete

Para descargar de la memoria un cierto paquete podemos hacer uso de la función detach. Su uso es el siguiente:

detach("babynames", unload = TRUE)

Diferencia entre un Paquete y una Libreria

En el caso de la función library(), en muchas ocasiones existe la confusión entre un paquete y una librería, y podemos encontrarnos con gente llamando "librerías" a los paquetes.

Una cosa es la función library() usada para cargar un paquete, y que se refiere al lugar en dónde el paquete es localizado, habitualmente una carpeta en nuestro ordenador, y otra un paquete que es una colección de funciones y datos empaquetados de forma conveniente.

Dicho de otra manera, y en palabras de Hadley Wickham, científico de datos en RStudio, y creador de la gran mayoría de paquetes del ecosistema tidyverse:

Diferencia entre Paquete y Libreria
Figura6 - Diferencia entre Paquete y Libreria

De igual manera, para recordar la diferencia es ejecutar la función library() sin argumentos. Esto nos proporcionará una lista de paquetes instalados en diferentes librerías en nuestro ordenador:

library()

Diferentes Fuentes de Documentación y Ayuda

Como ya sabemos de secciones anteriores, el archivo DESCRIPTION contiene información básica del paquete, y a pesar de que esta información es de gran utilidad, es probable que no sea conveniente para nuestro análisis. De ahí que necesitemos consultar dos fuentes mas de información: los archivos de ayuda y las vignettes.

Los Archivos de Ayuda

En primer lugar, como primer recurso para obtener información de un paquete es mediante los comandos ?() y help(). Recordemos que podemos conseguir información general del paquete mediante help(package = "packagename"), pero además cada función puede ser consultada individualmente mediante help("nombre de la función") o help(function, package = "package") si el paquete no ha sido cargado. Estas instrucciones nos mostrarán la descripción de la función y sus argumentos acompañados de ejemplos de utilización.

Por ejemplo, para obtener el archivo de ayuda de la función vioplot del paquete vioplot podemos hacerlo mediante la siguiente instrucción:

help(vioplot, package = "vioplot")

Nota: Podemos utilizar otra alternativa para inspeccionar un paquete cargado y es con la ayuda de la función ls() como se muestra a continuación:

library(babynames)
ls("package:babynames")
## [1] "applicants" "babynames"  "births"     "lifetables"

Vignettes

Otra fuente de ayuda incluida en la mayoría de paquetes son las vignettes. Estos documentos son utilizados por los autores para mostrarnos de una forma mas detallada las funcionalidades del paquete. El uso de las vignettes es un método útil para conocer la utilización del paquete, es por eso que se trata de un punto de partida antes de comenzar con nuestro propio análisis.

La información de las vignettes de un paquete están disponibles en el archivo DOCUMENTATION localmente o en línea. Además podemos obtener una lista de vignettes incluidas en nuestros paquetes instalados con la función browseVignettes(), en caso de que únicamente deseemos consultar las vignettes de un paquete pasaremos como argumento a la función el nombre del mismo: browseVignettes(package = "packagename"). En ambos casos, una ventana del navegador se abrirá para que podamos fácilmente explorar por el documento.

En el caso que, optemos por permanecer en la línea de comandos, la instrucción vignette() nos mostrará una lista de vignettes, vignette(package = "packagename") las vignettes incluidas en el paquete, y por último una vez hemos localizado la vignette de nuestro interés podemos explorarla mediante el uso de vignette("vignettename").

Por ejemplo, uno de los paquetes mas utilizados para la visualización de datos es ggplot2 y que trataremos con profundidad en apartados posteriores. Es probable que ya lo tengamos instalado en nuestro computador, en caso contrario es una buena oportunidad para poner en práctica lo que hemos aprendido hasta el momento.

Asumiendo que ya disponemos del paquete ggplot2 instalado, podemos consultar las vignettes que incluye mediante la siguiente instrucción:

vignette(package = "ggplot2")

Si ejecutamos la instrucción anterior podemos comprobar que existen dos vignettes disponibles para ggplot2, "ggplot2-specs" y "extending-ggplot2". Podemos explorar la primera mediante la siguiente instrucción:

vignette("ggplot2-specs")

En RStudio, el documento será mostrado en la pestaña de ayuda, mientras que en la interfaz RGui o la línea de comandos se nos mostrara en el navegador web.

En este enlace, podemos encontrar mas opciones para obtener ayuda en R.

Escoger el Paquete Correcto para Nuestro Análisis

En conclusión, hasta el momento hemos aprendido las herramientas para instalar y obtener la mayoría de paquetes para R, sin embargo todavía queda una cuestión en el aire: dónde podemos encontrar los paquetes que necesitamos.

El modo habitual de conocer los paquetes es aprendiendo R, en la mayoría de tutoriales, libros y cursos los paquetes mas populares son mencionados. Este curso puede ser un buen ejemplo: el módulo de importar datos te enseñara todo lo necesario en el uso de los paquetes readr, readxl y haven, el módulo de visualización de datos trata sobre ggplot2, y un largo etcétera.

Sin embargo, si nos encontramos ante una situación específica y no sabemos por donde empezar, por ejemplo como introduje en la introducción del capítulo en la que estábamos interesados en analizar texto en Coreano.

Lo anterior no quiere decir que no dispongamos de otros medios para buscar nuestros paquetes. Permitidme explorar algunas alternativas.

Una posibilidad es navegar por las categorías de los paquetes en CRAN, con la ayuda de CRAN task views. En esta vista podremos navegar por los paquetes agrupados por temas o categorías basado en su funcionalidad.

CRAN Task Views
Figura7 - CRAN Task Views

Volviendo al ejemplo del texto en Coreano, podemos con facilidad encontrar el paquete que necesitamos navegando al enlace Natural Language Processing. Desde este enlace, podemos buscar en la página hasta encontrar el paquete para realizar el procesamiento de lenguaje coreano, o bien mediante el atajo de teclado CTRL + F introduciendo un criterio de búsqueda en la barra que nos aparecerá.

Otra alternativa es utilizar la RDocumentation, un agregador para documentación de paquetes R de fuentes como CRAN, BioConductor y GitHub, el cual nos ofrece un barra de búsqueda directamente el la página principal.

Siguiendo con el ejemplo del texto en Coreano, a medida que vamos introduciendo texto en el cuadro de texto se nos muestran algunos resultados:

RDocumentation
Figura8 - RDocumentation

Pero introduzcamos la palabra "korean" para realizar una búsqueda completa y presionemos en el botón "Search". Podemos observar que se nos mostrara dos columnas con los resultados: los paquetes en la izquierda y las funciones en la derecha.

Resultado de la búsqueda
Figura9 - Resultado de la búsqueda

Centrándonos en la columna de paquetes, para cada resultado obtendremos el nombre de el paquete, junto a un enlace para una información mas detallada, el nombre del autor, al que también podemos acceder mediante el enlace para obtener otros paquetes del mismo autor, una descripción de el paquete con el criterio de búsqueda resaltado e información sobre la popularidad del paquete.

Columna paquetes
Figura10 - Columna paquetes

Respecto a la popularidad del paquete, es un indicador relevante puesto que la búsqueda ordena los paquetes por descarga, de un modo que mejora la relevancia de los resultados.

Dado que, parece ser que el paquete KoNLP cubre nuestras necesidades, después de hacer clic en su nombre, se nos mostrara la siguiente información:

  • Una cabecera con el nombre del paquete, el autor, la versión, una opción para obtener versiones anteriores, el número de descargas y un enlace a la página de RDocumentation.
  • Una descripción del paquete.
  • La lista de la funciones incluidas en el paquete, a las que podemos acceder haciendo clic en las mismas para obtener información detallada del uso de la función. Además, se nos mostrará una caja de búsqueda para un rápido acceso a la función deseada.
  • Un gráfico con la evolución de el número de descargas.
  • Los detalles del paquete con la información del archivo DESCRIPTION.

Hay que mencionar, además que RDocumentation no es únicamente un motor de búsqueda, puesto que nos ofrece una serie de características para buscar y aprender sobre paquetes y funciones R:

  • De igual manera que las task views de CRAN, RDocumentation nos ofrece sus propias task views que como hemos visto en apartados anteriores, es otro método para explorar paquetes R por temas.
  • Leaderboard. Esta página nos muestra información sobre los paquetes y desarrolladores mas populares, los paquetes mas recientes y actualizaciones, y tres gráficos con la distribución de paquetes descargados, las palabras claves mas populares y un gráfico de dependencias, en el que podemos comprobar como los paquetes mas populares están relacionados.
Gráfico de dependencias
Figura11 - Gráfico de dependencias
  • El paquete RDocumentation. RDocumentation no sólo es una página web sino también un paquete R. Este paquete nos permite incorporar la potencia de RDocumentation en nuestra flujo de trabajo. Una vez este paquete es cargado, la función help() abrirá un ventana en RStudio con acceso a la documentación de RDocumentation.

Disponer de RDocumentation en RStudio nos proporciona ventajas comparado al uso de la versión web, puesto que:

  • Podemos comprobar la versión del paquete instalado. El panel de ayuda de un paquete proporciona la misma información que la versión web (descargas, descripción, lista de funciones y detalles), además de información sobre la versión instalada del paquete.

A modo de ejemplo, comprobemos el paquete vioplot que hemos instalado en un apartado anterior:

install.packages("RDocumentation")
library(RDocumentation)
help(package = "vioplot")
RDocumentation en RStudio
Figura12 - RDocumentation en RStudio
  • Además de proporcionarnos la habilidad de instalar y actualizar paquetes directamente desde el panel de ayuda. Por ejemplo, eliminemos el paquete vioplot de nuestro equipo y probemos a instalar el paquete desde el panel de ayuda mediante el botón que nos proporciona RDocumentation:
remove.packages("vioplot")
help(package = "vioplot")
Instalación paquetes con RDocumentation
Figura13 - Instalación paquetes con RDocumentation
  • Ejecutar y proponer ejemplos. El panel de ayuda de las funciones de un paquete proporciona la opción de ejecutar ejemplos con un solo clic en un botón. Además tenemos la posibilidad de incorporar ejemplos en la página de ayuda para que sean utilizados por otros usuarios de R.
install.packages("vioplot")
help(vioplot)
Ejecutar ejemplos
Figura14 - Ejecutar ejemplos

results matching ""

    No results matching ""