Desarrollo de paquetes con R
Crea tus propias herramientas para trabajar con datos en R y compártelas!
25/8/2026
En este tutorial veremos cómo crear tu propio paquete de R, para agrupar funciones y datos en un software que puedes usar a través de varios proyectos y compartir con otras personas.
Introducción
El desarrollo de paquetes es en cierto modo uno de los objetivos finales del lenguaje R, donde puedes cristalizar tus ideas, herramientas y procesos en tu propio programa. De alguna forma, esto te convierte desde ser un simple usuari@ de R a ser parte activa de la construcción de la comunidad de R por medio de tus contribuciones!
Ciclo de desarrollo de un paquete
Siempre sentí que desarrollar un paquete era muy difícil, pero la verdad R tiene muchas herramientas para hacer este proceso lo más sencillo posible, principalmente
el paquete {usethis}.
Para desarrollar un paquete de R naturalmente hay que entender la estructura de un paquete, y luego familiarizarse con el proceso de desarrollo del mismo.
Estructura de un paquete de R
Ciclo de desarrollo de un paquete de R
Luego de haber levantado los cimientos del paquete, el desarrollo es una especie de ciclo en el que vamos repitiendo la creación de funciones, documentación, creación de pruebas, chequeo del paquete, y repetir.
En detalle, el ciclo de desarrollo de un paquete es así:
- Creamos una función nueva con
usethis::use_r()- Se crea un script nuevo en
R/funcion.Ry se abre en RStudio - Programamos lo básico de la función en ese script
- Se crea un script nuevo en
- Documentamos la función con
comentarios de
{roxygen2}directamente encima de la función que creamos - Creamos pruebas unitarias para la función creada con
usethis::use_test()- Ponemos a prueba la función y especificamos qué debería retornar, para asegururarnos ahora y en el futuro de que funciona correctamente
- Chequeamos que todo esté bien en el paquete con
devtools::check()
Veremos todos estos pasos y más en este tutorial!
Pasos previos
Antes de iniciar el desarrollo de un paquete, necesitamos confirmar que tenemos los paquetes necesarios. Como mínimo, serían {devtools}, {usethis} y {pak}.
install.packages(c("devtools", "usethis", "pak"))
devtools::has_devel()
devtools::dev_sitrep()
También necesitaremos tener configurado y funcionando Git en nuestra sesión de R, para poder ir respaldando las versiones del paquete, y también para hacerlo disponible e instalable en internet. Podemos revisar esto con la siguiente función:
usethis::git_sitrep()
Si no has configurado Git con R aún, revisa este tutorial.
Publicaciones relacionadas
Creación de un paquete de R
pak::pkg_name_check("nombre")
usethis::create_package("nombre")
# revisar que todo esté bien
devtools::check()
Documentos mínimos
usethis::use_readme_rmd()
usethis::use_mit_license()
# usethis::use_gpl3_license()
Repositorio Git
En este punto se recomienda empezar a respaldar tu código con Git. Para eso creamos el repositorio local, guardando el estado del código en una nueva versión:
# crear repositorio local
usethis::use_git()
Los avances futuros los irás guardando regularmente en versiones nuevas, y así mantendrás un control de versiones que te permitirá explorar estados pasados, deshacer cambios en el tiempo, ir registrando cambios nuevos al código, y más.
Pero el uso principal que le daremos al repositorio de control de cambios de Git es la posibilidad de mantener un positorio remoto que guarde tus versiones en internet por medio de GitHub. Github es la página que usa la mayoría de desarrolladores/as para subir su software, respaldarlo en la nube y hacerlo visible para el mundo. De este modo, otras personas podrán navegar tu código, clonarlo en sus computadores para ofrecer mejoras o funcionalidades nuevas, e instalar el paquete en sus computadores.
# crear repositorio remoto
usethis::use_github()
Instalación local del paquete
pak::local_install()
Crear funciones para el paquete
https://bastianolea.rbind.io/blog/r_introduccion/r_intermedio/
# funciones
# crear función
usethis::use_r("territorios")
Explicitar dependencias
# agregar dependencia a un paquete
usethis::use_package("dplyr")
usethis::use_package("cli")
Revisiones
# revisar que todo esté bien
devtools::check()
# recargar el paquete
devtools::load_all()
Pruebas unitarias
https://bastianolea.rbind.io/blog/validacion_avanzada/#validación-con-testthat
usethis::use_testthat()
# crear test para una función
use_test()
usethis::use_test("territorios")
# realizar todas las pruebas
devtools::test()
Publicaciones relacionadas
Incluir datos
# crear datos del paquete
usethis::use_data_raw("territorios")
Iteración
# crear función
usethis::use_r("comunas")
# recargar paquete
devtools::load_all()
# crear prueba para la función
usethis::use_test("comunas")
# realizar todas las pruebas
devtools::test()
y repetir!
# documentación
# escribir documentación
devtools::document()
# crear viñeta
usethis::use_vignette("territorial.qmd") # si se llama como el paquete tiene un rol distinto
# instalar el propio paquete
pak::local_install()
knitr::knit("README.Rmd")
# sitio del paquete
# usethis::use_pkgdown()
# usethis::use_pkgdown_github_pages()
# reconstruir sitio
pkgdown::build_site()
# usethis::use_github_pages()
# poner enlace en _pkdown.yml y description
# usethis::use_github_action("pkgdown")
# cuando se haga push se construirá el sitio
Publicaciones relacionadas
Publicaciones sobre avanzado