Mar 16 / Sebastián Garrido de Sierra

?R | #8 - Mi mambo por los 📦s

Al comienzo, R parecía mágico.

El profesor nos ofrecía ejemplos de código como estos...
y simplemente funcionaban.

Su método de enseñanza permitió que mis primeras interacciones con R fueran razonablemente tersas...

...pero me generó una falsa sensación de seguridad.

Y, peor aún, contribuyó a que mi primer modelo mental de este lenguaje de programación fuera incorrecto.

O, puesto en términos de mi padre, a que se me hiciera un mambo en la cabeza (Don Garri dixit).

Me explico.

Al terminar el curso, después de ejecutar cientos de líneas de código en un contexto estable, homogéneo y controlado, concluí dos cosas:

  1. Desde su instalación, R venía con todas las herramientas (p. ej., funciones) que necesitaría para afrontar cualquier reto de programación o análisis de datos; y,                                                         
  2. Este universo de herramientas era estático e igual para cualquiera que usara el programa. Así que si una compañera ejecutaba una instrucción en R en su computadora, yo también debería poder hacerlo.

La vida no tardó mucho en enseñarme que ambas conclusiones eran equivocadas, pero sí en permitirme comprender por qué.

Después de años de pruebas y frustraciones, descubrí que mi confusión en ambos puntos tenía un origen común: no entendía bien la lógica ni relevancia de los paquetes 📦 en el mundo de R.

A esto dedicó el número de esta semana de ?R.

💡 Tips

1) ¿POR QUÉ PODEMOS TRABAJAR CON R DESDE QUE LO INSTALAMOS?

La "magia" de R a la que me refería antes es posible porque cuando lo instalamos, éste a su vez viene con 29 paquetes preinstalados, de los cuales siete se cargan siempre que iniciamos una sesión.
En conjunto, estos siete paquetes incluyen 2,356 funciones 🤯 (acá encontrarás el código para confirmarlo).

Cada una de estas funciones nos ofrece una forma más rápida y sencilla de pedirle a R que haga algo, en comparación con escribir el código desde cero.

De los siete paquetes preinstalados y precargados, {base}, el que está arriba a la izquierda en la imagen de arriba, es, por mucho, el más importante de todos.

Sus casi 1,300 funciones no sólo nos ofrecen un enorme universo de herramientas para trabajar, sino que también definen la naturaleza de R como un lenguaje de programación.

Nota bene

Si llevas un rato en el mundo de R, probablemente habrás oído la distinción entre las tradiciones de R "base" y el {tidyverse}.

El nombre de la primera corriente, por llamarla de alguna forma, se deriva justo de este paquete.


Ok.

Podemos jugar con R desde el segundo uno porque éste viene con casi 30 paquetes preinstalados, y siete de estos siempre están listos para ser usados.

Pero hasta ahora no he explicado algo fundamental:

2) ¿QUÉ SON LOS PAQUETES? 📦

En el sentido más básico, un paquete es una colección de funciones (esa forma abreviada y eficiente de darle instrucciones a R).

La enorme mayoría de los paquetes también contienen la documentación que explica qué puedes hacer y cómo usar sus funciones.

Manual del 📦 {wesanderson}, url: ​https://tinyurl.com/3bn2kybj​

Nota bene

La ayuda que R o RStudio nos proporcionan cuando usamos la función ? más el nombre de una función o base de datos (p. ej., ?mean()) proviene justo de la documentación del respectivo paquete.

Puedes confirmarlo ejecutando ?mean() y después yendo a
esta liga.


En algunos casos, los paquetes vienen acompañados de breves tutoriales llamados ​viñetas. 

Si ejecutas la primera línea del siguiente chunk de código verás las viñetas disponibles para {dplyr} (el paquete debe estar instalado en tu compu):

Y si ejecutas la segunda, verás esta viñeta en particular:
Ciertos paquetes también incluyen una o más base de datos.

La primera línea de código del bloque a continuación te permite preguntarle a
R qué bases de datos vienen incluidas en el paquete {naniar} (el paquete debe estar instalado en tu compu).
Si después ejecutas las siguientes dos, verás esto en tu consola:
Por lo general, las funciones incluidas en un paquete tienen un objetivo en común.

Por ejemplo, mientras que las funciones del paquete filter() nos permiten trabajar con variables que registran mediciones de tiempo, las del paquete {stringr} están diseñadas para facilitarnos la vida al lidiar con cadenas de texto.

Dada su versatilidad, los paquetes se volvieron el principal medio para compartir conocimiento y habilidades al interior de la comunidad de R.

Y esto nos lleva a mi segunda distorsión inicial respecto a este programa...

3) EL UNIVERSO DE PAQUETES DE R ESTÁ EN CONSTANTE EXPANSIÓN 🚀

Las 2,356 funciones de los siete paquetes precargados, sumadas a las casi 1,600 de los otros 22 paquetes preinstalados, nos ofrecen muchísimas opciones para trabajar en R.

Pero es imposible que cubran todas nuestras necesidades.

Por ello, casi desde que se creó este programa, las y los usuarios han construido sus propias funciones. 

Y en muchos casos las han compartido con el resto de la comunidad mediante... 


(ruido de 🥁)


... paquetes. 


De 1997 a la fecha se han publicado casi 29 mil paquetes en el ​CRAN... 
... de los cuáles poco más de 22 mil siguen activos.

Y la cifra aumenta, literalmente, cada día.

Si copias y ejecutas las siguientes líneas de código tendrás una buena idea del número más reciente de paquetes activos:

--0--

¿Cómo cambió mi mapa mental de R después de aprender lenta y tortuosamente lo que te acabo de contar? 

Lo podría resumir en cinco puntos: 

  1. Los 29 paquetes que vienen junto con R definen el piso, no el techo del número y tipo de funciones que podemos usar al trabajar con este lenguaje de programación                                                         
  2. Gracias a la constante publicación de nuevos paquetes, el universo de funciones en el mundo de R está lejos, muy lejos, de ser estático                                                                                                                
  3. Dadas nuestras divergencias en intereses y necesidades, es muy probable que quienes trabajamos con este lenguaje de programación tengamos instalado un subconjunto diferente de paquetes                                                                                                                                                                          
  4. En consecuencia, solamente seremos capaces de ejecutar el código de otras personas en la medida en que antes hayamos instalado y cargado los paquetes que esas personas usaron al escribir sus scripts                                                                                                                                                                          
  5. Los paquetes nos ofrecen una oportunidad increíble para expandir nuestras habilidades al trabajar en R, y, en el camino, personalizar de forma casi única nuestra versión de este programa

Paso ahora a los recursos de la semana...

¿Te gustaría recibir nuestro newsletter cada semana en tu correo?

Compártenos tu info y te lo mandamos.

Nos importa tu privacidad.
Averigua
aquí qué hacemos para protegerla.
Muchas gracias 🙂

En los próximos minutos recibirás un correo de Sebastián de Data Crunchers

Si no lo encuentras en la bandeja de entrada, por favor revisa las carpetas de Spam y Social (o equivalentes).

⚡️ Recursos

1) ¿LIBRERÍA O PAQUETE?

Una de las cosas que más me confundía al comienzo era si debería referirme a los paquetes como "librerías" o "paquetes".

En nada me ayudaba escuchar a diversos colegas usar uno y otro término como si fueran intercambiables.

Sin embargo, como explica Carlisle Rainey en este post, paquetes es el término correcto.

Para ilustrar por qué, Carlisle cita esta sección del Manual para escribir extensiones en R:

Nota bene

"Un paquete es un directorio de archivos que amplía R... Un paquete no es una librería. Este [término] se usa en dos sentidos en la documentación de R. El primero es un directorio en el que se instalan los paquetes ...El segundo [sentido] es aquel usado por el sistema operativo (especialmente Windows)... Este mal uso común [del término librería] parece provenir de S, cuyos análogos de los paquetes se conocían oficialmente como secciones de librería..."


Aprovechando el paréntesis ñoño, te comparto otra precisión que descubrí hace poco: de acuerdo ​
Wickham y Bryan, senseis absolutos de R, en términos técnicos no cargamos paquetes, sino que los adjuntamos.

He vivido en el error por años 🥲.

2) {pacman} 📦

Las funciones que generalmente se usan para instalar y cargar (adjuntar, Segasi, adjuntar 😒) paquetes en R son install.packages() y library(), respectivamente.
Yo prefiero usar la función p_load() del paquete {pacman} (página) porque:

  • Está diseñada para instalar y/o adjuntar paquetes en un sólo paso 😎
  • Y nos permite realizar estas tareas para muchos paquetes en un sólo llamado de p_load()

Imagina que ejecutas las siguientes líneas de código:
y que de los tres paquetes que quieres adjuntar, hace unos meses instalaste {ineq}  y {pak}.

Al ejecutar pacman::p_load(httr2, ineq, pak), la funciona primero intentará adjuntar los tres paquetes.

Si sólo encuentra dos en tu computadora, como en este caso, los adjuntará.

Y en el caso del tercer paquete, {httr2}, primero lo instalará y después lo adjuntará.


3) {pak} 📦

Otro paquete muy útil para instalar y descargar paquetes, así como para analizar su historia y dependencias, es {pak} (página).

Está diseñado para ser ultra informativo y preciso.

Por ejemplo, si usas la función pkg_install() para instalar el paquete {tibble} por primer vez, verás un mensaje como este en la consola:
Te recomiendo que le eches un ojo a su página para descubrir todo lo que puedes hacer con él.


Hasta aquí llegué por hoy, colega.

Si crees que este correo te ayudó a entender un poquito mejor el mundo de R, ¿se lo podrías compartir a alguien más que consideres que le pueda ser útil?

Un saludo y buen domingo,

~ Sebastián

Empty space, drag to resize
Postdata

Desde hace unos años, es común que cuando se presenta un nuevo paquete en sociedad, éste tenga su propio ícono en forma hexagonal (
acá puedes ver los hex de los paquetes que integran el {tidyverse}).

Al principio, pensé que la forma geométrica de estos íconos era una decisión cualquiera.

Hasta que un día me di cuenta que...