Taller de LatinR 2026
Todo el material está en el sitio del taller: slides, episodios, ejercicios y código para copiar. https://yabellini.github.io/desarrollo_paquetes/
Web del taller: https://yabellini.github.io/desarrollo_paquetes/
Este taller se rige por el código de conducta de LatinR.
Queremos que todas las personas se sientan bienvenidas, sin importar su experiencia, su país, su género, su religión o la cantidad de veces que pregunten lo mismo.
Código de Conducta: https://latinr.org/sobre/coc/
Presentate a las personas que tenes al lado 👋
| Bloque 1 | ¿Qué es un paquete? · Crear el paquete · Primera función |
| 🧉 | Pausa |
| Bloque 2 | Documentar · Datos |
| 🤸 | Pausa |
| Bloque 3 | Dependencias y mensajes · Tests · Compartir · La IA en el ciclo de desarrollo |
¡Podés escribir un paquete de R!
Preguntas de Susan Johnston.
Para calmar tus temores, recordá que no es más que una carpeta organizada de una manera específica.
— Sébastien Rochette
Una carpeta bien organizada que puede contener:
library().Para compartir código y datos con:
Y para aprender: buenas prácticas, herramientas, y poder contribuir a otros paquetes.
Regla práctica: si una función la usás en más de un proyecto, ya merece un paquete.
| usethis | crea archivos y carpetas |
| devtools | carga, documenta, testea, revisa, instala |
| roxygen2 | documentación: páginas de ayuda |
| testthat | tests |
| cli | mensajes y errores claros |
| pak | instalar paquetes y comprobar nombres |
dichososEstoy al horno con papas
Estar en un problema muy grande y sin salida fácil. (Argentina)
dichos, 27 dichos de 9 países.dicho_al_azar(), dicho_del_dia(), buscar_dicho().¿Cuál es correcta?
Levanten la mano los que responden… ⏱ 3:00
Pensá en un código que copiaste y pegaste en más de un proyecto.
Escribilo en una línea en el documento colaborativo.
¡Ese puede ser tu primer paquete!
⏱ 2:00
⚠️ Solo conoce malas palabras en inglés.
usethisdichosos/
├── DESCRIPTION ← metadatos
├── NAMESPACE ← no se toca a mano
├── R/ ← las funciones
├── .Rbuildignore ← lo que no es parte del paquete y se debe ignorar al construirlo
└── dichosos.Rproj ← proyecto de RStudio (en Positron no está)
devtools::check()El objetivo: 0 errors ✔ | 0 warnings ✔
Atajo: Ctrl/Cmd + Shift + E
dichosos.check(), licencia MIT, check() hasta 0 errores y 0 warnings.Title, Description y Authors@R en DESCRIPTION.⏱ 15:00 Nota adhesiva en tu compu cuando termines.
use_r()✏️ Editar → 🔄 load_all() → 🧪 Probar → ✏️ …
Guardar no alcanza: después de cada cambio, hay que volver a cargar.
dicho_al_azar() con un dicho de tu país en el vector.load_all(). ¿Aparece?⏱ 15:00
10 minutos. ⏱ 10:00
document()man/dicho_al_azar.Rd → la página de ayuda.export(dicho_al_azar) en NAMESPACE.Nunca edites a mano NAMESPACE ni los archivos de man/.
Atajo: Ctrl/Cmd + Shift + D
@export: pública. Se usa después de library(dichosos).@export: interna. Solo para otras funciones del paquete.load_all() es generosa: te deja usar todas. Por eso a veces nos olvidamos del @export.
dicho_al_azar(), corré document() y mirá ?dicho_al_azar.⏱ 10:00
data-raw/data-raw/: el CSV y el código que lo prepara. No se instala.data/dichos.rda: los datos listos. Se instalan con el paquete.Dentro de un año vas a saber de dónde salieron tus datos. 🙏
En R/data.R, arriba del nombre entre comillas:
#' Dichos y expresiones populares de América Latina
#'
#' @format Un data frame con 48 filas y 4 columnas:
#' \describe{
#' \item{dicho}{El dicho o la expresión.}
#' \item{significado}{Qué quiere decir.}
#' \item{pais}{País donde se usa.}
#' \item{tema}{Tema del dicho.}
#' }
#' @source Recopilado para el taller de LatinR 2026.
"dichos"use_data_raw() y use_data().____ de la nueva dicho_al_azar().dicho_al_azar(pais = "Narnia"). ¿Qué te gustaría que pase?⏱ 15:00
10 minutos para estirarse. ⏱ 10:00
Imports: lo que el paquete necesita.Suggests: lo que se usa a veces (tests, viñetas).paquete::funcion().Nunca library() adentro de un paquete.
Error in `dicho_al_azar()`:
! No tengo dichos de "Narnia".
ℹ Los países disponibles son: "Argentina", "Brasil", "Chile", ...
❯ checking R files for non-ASCII characters ... WARNING
Portable packages must use only ASCII characters in their R code,
except perhaps in comments.
| á é í ó ú | \u00e1 \u00e9 \u00ed \u00f3 \u00fa |
| ñ | \u00f1 |
En los comentarios y en los datos, las tildes están bien.
Imports o Suggests?check().library(cli) en R/?⏱ 10:00
Un test es un experimento de la consola, guardado, que se corre solo y avisa si algo cambió.
No sé qué dicho va a salir.
Pero sé cómo tiene que ser:
Cambiá size = 1 por size = 2 y corré los tests.
── Failure: dicho_al_azar() devuelve un solo texto ──
`resultado` has length 2, not length 1.
Si nunca viste fallar un test, no sabés si sirve.
dicho_al_azar().buscar_dicho() con su test.⏱ 12:00
Lo muestro yo; ustedes lo prueban en casa (desafío 8.2).
Y cualquier persona lo instala con:
pak::pkg_name_check()usethis::create_package() y use_mit_license()usethis::use_r() y devtools::load_all()devtools::document()usethis::use_data_raw() y use_data()usethis::use_package()usethis::use_testthat(), use_test() y devtools::test()usethis::use_readme_rmd() y devtools::install()Y siempre: devtools::check()
build_readme(), install().library(dichosos) y dicho_al_azar().use_git(), use_github() y compartí el enlace.⏱ 7:00
usethis::use_vignette().check() en la nube con GitHub Actions.En castellano:
Dónde ayudan las herramientas de IA y dónde no
Hoy hicimos todo a mano, a propósito.
Ahora sabés qué hace cada paso.
Eso te permite revisar lo que hace una herramienta de IA.
Si me siento a hacer música porque quiero hacer músicaentregarme la canción ya hecha es entender todo al revés.El proceso no era un obstáculo que había que sortear para llegar al resultado.
The task isn’t the job, Sunil Pai.
En un taller, el proceso es el objetivo.
R/load_all() y probar en la consolause_test() y escribir teststest() hasta que pasendocument()check()Cambia quién escribe cada parte.
| La IA | Vos | |
|---|---|---|
| Código | lo escribe | lo probás y lo entendés |
| Tests | le encantan | que sean pocos y fallen cuando deben |
| Docs | un borrador | tu voz, para personas |
check() |
arregla lo que encuentra | lo corrés siempre |
| Datos | limpia y transforma | son tu responsabilidad |
Siempre, siempre, aclará tu uso de la IA.
Software Review in the Era of AI, blog de rOpenSci.
| Cómo | Ejemplos | |
|---|---|---|
| Chat | Conversás en una página web; vos copiás el resultado | Copilot en github.com, claude.ai, ChatGPT |
| Cliente | Conecta el modelo con tu editor o tu código de R | Copilot en Positron o RStudio, ellmer |
| Agente | Hace cosas en tu computadora: edita archivos, corre código | Posit Assistant, Claude Code, Codex |
Más autonomía → más importante revisar.
Un modelo, adentro de un programa que le da herramientas, corriendo en un ciclo, usando esas herramientas para lograr un objetivo.
Hadley Wickham y Jenny Bryan.
GitHub Copilot Free: con cualquier cuenta personal de GitHub.
Estudiantes, docentes y personas que mantienen proyectos de código abierto pueden pedir planes más completos gratis.
Usá Git siempre. Es tu botón de deshacer.
load_all(), @export, snapshot.| Si un error… | Cómo trabajar | Ejemplo en dichosos |
|---|---|---|
| se arregla en un minuto | Pedilo y revisá el resultado | Arreglar el WARNING de tildes |
| lleva un rato arreglar | Pedí un plan primero | Agregar dichos_por_tema() |
| afecta a otras personas | Revisá el plan y el resultado | Cambiar dicho_al_azar() |
| es difícil de deshacer | Diseñá vos, la IA implementa | Preparar el paquete para CRAN |
En https://github.com/copilot, con el repositorio de dichosos:
Agregá a dichosos la función
dichos_por_tema(tema)enR/dichos_por_tema.R. Usá R base, sin dependencias nuevas. Si el tema no existe, dá un error concli::cli_abort()que liste los temas, como endicho_al_azar(). Documentala con roxygen2 y exportala. Tests cortos. Antes de escribir código, mostrame un plan.
Después: leer el plan → pedir el código → copiarlo al paquete → mirar los cambios en Git → load_all() → check().
¿Delegar, borrador o a mano?
buscar_dicho()dicho_del_dia()⏱ 5:00
Encontrá al menos cinco problemas (los tests están en el sitio).
⏱ 7:00
En el documento colaborativo:
¿Qué código tuyo vas a convertir en paquete?
Más vale tarde que nunca (Varios paises)
Y nunca es tarde para tu primer paquete.
Gracias a LatinR, a quienes ayudaron hoy, a las personas que me pasaron sus dichos favoritos (Elio, Luis, Olivier, Alejandra), a la gente de Posit por compartir los materiales de sus talleres, a Maëlle Salmon y Paola Corrales, con quienes escribí los materiales en los que se basa este taller.
Tu primer paquete de R · LatinR 2026