R base, paquetes y Tidyverse: de qué hablamos cuando usamos R
Cuando empezamos a trabajar con R, una de las primeras expresiones que aparecen es “R base”. No, mentira: cuando empezamos a trabajar con R no tenemos idea de lo que estamos haciendo. Copiamos el código de los cursos que estamos haciendo o de los libros o tutoriales que estamos siguiendo. Es posible que esos materiales contengan información sobre la fuente de esas funciones, pero como aprendices nuestra memoria de trabajo está un poco saturada y seguramente no le hayamos prestado atención.
A medida que vamos incorporando los conceptos y automatizando el ritmo de trabajo, podemos empezar a prestar atención a la teoría. Y vemos que surgen estos conceptos: R base, paquetes, librerías, Tidyverse. Estas palabras circulan con naturalidad en tutoriales, clases y foros, aunque no siempre se explicita qué significan ni cómo se relacionan entre sí. Sin embargo, entender esta arquitectura es clave para poder leer código con mayor autonomía y para tomar decisiones informadas sobre cómo trabajar con datos.
R base refiere al conjunto de funcionalidades que vienen incluidas cuando se instala R. Incluye el lenguaje propiamente dicho, un conjunto amplio de funciones fundamentales y algunos paquetes básicos que se cargan automáticamente. Operaciones aritméticas, creación de objetos, manejo básico de vectores y data frames, funciones como mean(), sum(), plot() o summary(), forman parte de este núcleo. R base define la gramática mínima del lenguaje y establece las reglas que permiten que todo lo demás funcione.
Trabajar solo con R base es posible, y de hecho durante muchos años fue la forma estándar de usar R. Sin embargo, ese núcleo está pensado para ser extendido. R fue diseñado desde el inicio como un lenguaje1, capaz de incorporar nuevas funcionalidades sin modificar su estructura central. Esa extensibilidad se materializa a través de los paquetes.
Un paquete es un conjunto organizado de funciones, datos y documentación que se puede descargar e incorporar a una sesión de R. Cada paquete responde a una necesidad específica: análisis estadístico particular, visualización, manejo de textos, trabajo con encuestas, modelos avanzados o formatos de datos concretos. Técnicamente, instalar un paquete implica descargarlo en la computadora; usarlo implica cargarlo en la sesión activa. Conceptualmente, usar un paquete implica adoptar una forma particular de resolver problemas analíticos. Hay paquetes de todos los gustos y colores: algunos se enfocan en funciones, otros en datos. Dado que hay muchos paquetes distintos que realizan las mismas acciones, en el último tiempo se ha insistido bastante en la importancia de citar los paquetes utilizados en el análisis de datos, con lo cual han surgido, no sin cierta ironía, paquetes que facilitan el citado de los paquetes.
Los paquetes pueden pensarse como cristalizaciones de prácticas de investigación. Quien desarrolla un paquete toma decisiones sobre qué operaciones facilitar, cómo nombrarlas, qué estructuras de datos privilegiar y qué supuestos dar por sentados. Cuando usamos una función de un paquete, no solo estamos reutilizando código, sino también incorporando una cierta manera de pensar el análisis. Si bien es difícil conocer a fondo el paquete del cual estamos tomando una función, siempre es una buena práctica leer su documentación.
En este punto suele aparecer otra fuente de confusión: el término “librería”. En R, librería se usa para referirse al lugar donde están instalados los paquetes en el sistema, y también, por extensión, al acto de cargarlos mediante la función library(). En la práctica cotidiana, hablar de paquetes y librerías suele ser intercambiable, aunque desde un punto de vista técnico no sean exactamente lo mismo. Lo importante es entender que R base se amplía mediante paquetes que se cargan según las necesidades del análisis.
Dentro de este universo de paquetes, hay uno que ocupa un lugar particular: el Tidyverse. El Tidyverse no es un paquete único, sino un conjunto de paquetes diseñados para trabajar de manera coherente entre sí. Incluye herramientas muy utilizadas para la manipulación de datos, la visualización y la importación de archivos, como dplyr, ggplot2, tidyr, readr y stringr, entre otros. Todos comparten una filosofía común y una sintaxis relativamente consistente, que se encuentra en el libro R para ciencia de datos [R for Data Science] de Hadley Wickham y Garrett Gloremund.
La propuesta central del Tidyverse es organizar el trabajo con datos a partir de principios claros. Uno de los más conocidos es el concepto de datos “ordenados” (tidy data), donde cada variable ocupa una columna, cada observación una fila y cada tipo de unidad analítica una tabla.

Este principio, que puede parecer puramente técnico, tiene implicancias analíticas importantes, porque fuerza a explicitar qué se considera una variable, qué cuenta como observación y cómo se estructuran los datos. Esto puede cambiar no solamente entre conjuntos de datos, sino también entre análisis y mismo entre funciones. Por ejemplo, una función que haga un análisis estadístico de comparación de grupos puede tomar la variable de agrupación de una sola columna o puede pedir que cada grupo tenga su propia columna.
Otro rasgo distintivo del Tidyverse es su énfasis en la legibilidad del código. Las funciones suelen tener nombres verbales, los argumentos privilegian la claridad y el uso del operador %>% propone una lectura secuencial de las operaciones. Para quienes vienen de tradiciones donde la interpretación de textos y la explicitación de procedimientos son centrales, esta orientación resulta especialmente atractiva. El código se presenta como una secuencia de transformaciones que puede leerse casi como una narración del análisis (¡o como una receta de cocina!)2.
Esto no significa que el Tidyverse reemplace a R base. De hecho, se apoya constantemente en él. Muchas funciones del Tidyverse envuelven o reorganizan funcionalidades existentes en R base, ofreciendo una interfaz distinta. Elegir trabajar con R base, con paquetes específicos o con el Tidyverse no es una cuestión de corrección, sino de enfoque. Cada opción implica adoptar ciertas convenciones y renunciar a otras. También tiene que ver con conocer a la audiencia de nuestro código: determinados paquetes suelen ser más famosos en determinados ámbitos y eso puede privilegiar nuestra decisión de usarlos frente a otras alternativas menos conocidas. En definitiva, se trata de usar el lenguaje de la forma que facilitará su comprensión.
Entender estas diferencias permite salir de una lógica puramente instrumental. Usar R no consiste solo en saber qué comando ejecutar, sino en comprender qué marco conceptual estamos utilizando al hacerlo. R base, los paquetes y el Tidyverse forman capas de un mismo lenguaje, que se combinan de maneras diversas según el problema de investigación, el tipo de datos y las preguntas que se quieren formular.
En los próximos textos de esta serie volveremos sobre estas herramientas con ejemplos concretos. La idea no será aprender listas de funciones, sino desarrollar criterios para leer código, reconocer estilos y elegir conscientemente cómo trabajar con R en contextos de investigación situados.
Footnotes
Otra vez aparecen metáforas que acercan el lenguaje de programación a otras disciplinas. En este caso, pienso en la concepción modular de la mente, de Jerry Fodor.↩︎
Acá hay que hacer una aclaración. El famoso operador
%>%(pipe) durante mucho tiempo fue sinónimo de Tidyverse aunque proviene del paquete específicomagrittr. Sin embargo, la versión R 4.1.0 que salió en mayo del 2021 incorporó un operador similar,|>, con lo cual la concatenación de funciones como la que se ve en ese simpático gif ya no es exclusiva de Tidyverse. En rigor de verdad, ambos operadores tienen funcionamientos distintos, por lo cual reemplazar el operador%>%por|>de forma masiva en nuestro código puede dar lugar a errores. Las diferencias pueden ser demasiado técnicas para alguien que recién está empezando, pero si les interesa pueden leer un poco acá.↩︎