Maëlle Salmon 🏠 https://masalmon.eu 🐦 ma_salmon
Licencia CC-BY-SA
¡Compartiré consejos y trucos!
¿Pero primero, quién soy?
Ingeniera de software para investigación en rOpenSci a tiempo parcial, en particular manteniando nuestra guía de desarrollo y revisión de paquetes R (“dev guide”). 🔧
Trabajo sobre la proxima versión de pkgdown. ✨
E-libro “HTTP testing in R” con Scott Chamberlain. 📖
Curso “Bloguear con R Markdown” en LatinR 2020. 📝
Cuenta Twitter de R-Ladies Global. 🐦 ¡Utiliza la etiqueta #RLadies
!
Editora para el sistema de revisión de paquetes de rOpenSci. 📦
Varias charlas. 😉
Que cad@ un@ aprenda al menos una cosa nueva. 😁
⚒️ Principios fundamentales para proyectos R ;
⚒ Cómo proteger tu proyecto R de cambios externos;
⚒️ Cuál estructura para tu proyecto ;
⚒️ Cómo hacer girar tu proyecto.
😿 No es lo que preguntó El Pequeño Príncipe (oveja).
😺 Mejora la vida de toda persona tocando o leyendo tus resultados y su origen. Reproducibilidad.
😹 Siempre hay algo que mejorar o sobre lo cuál procrastinar.
😦 No estoy a cargo de realizar análisis muy a menudo.
😄 Me informo mucho sobres las novedades de R.
✨ https://www.learnr4free.com/es/index.html ✨
Sitio de Mine Dogucu, lista de recursos en español mantenida por Yanina Bellini Saibene.
¡Es una lista colaborativa! 😉 👋
“Everything I know is from @JennyBryan.” —@sharlagelfand #mood #rstudioconf
— Kara Woo (@kara_woo) January 30, 2020
Don’t repeat yourself, talk to yourself! Repeated reporting in the R universe
¡Sharla también es una fuente de buenas ideas! 💐
Logo de Martin Monkman.
¡Un proyecto, una carpeta!
The Kei-tora Gardening Contest is an annual event put on by the Japan Federation of Landscape Contractors to see who can build the best looking garden on the back of a Kei truck. Here are some of the winners from the past 12 years. https://t.co/IpkRiALn7a pic.twitter.com/vep4K0VZt6
— Doctor Popular 💉 💉 🎉 (@DocPop) June 10, 2021
Si la primera línea de tu programa es …
🔥 setwd("C:/usuarios/tu/una/ruta/especifica/a/tu/ordenador)
;
🔥 or rm(list = ls())
;
Jenny Bryan vendrá en tu oficina y prenderá fuego tu ordenador. 😱
NO:
readr::read_csv("/home/maelle/Documents/conferences/r-ladies-montevideo/datos/cosas-buenas.csv")
Ilustración de Allison Horst.
.Rproj
o un archivo vacío llamado .here
a la raíz del proyecto.
Rutas relativas a este.
here::here()
[1] "/home/maelle/Documents/conferences/r-ladies-montevideo"
here::here("datos")
[1] "/home/maelle/Documents/conferences/r-ladies-montevideo/datos"
readr::read_csv(here::here("datos", "cosas-buenas.csv"))
Funciona desde cuálquier parte de mi carpeta r-ladies-montevideo
! (r-ladies-montevideo/README.Rmd
, r-ladies-montevideo/informes/codigo.R
, etc.)
¡Reinicie R a menudo y sin miedo!
¡NUNCA guardar y cargar de nuevo .RData
!
`usethis::use_blank_slate()` sets your @rstudio preference to NEVER save/restore .RData on exit/startup, which is a lifestyle endorsed by many #rstats folks (including me).
— Jenny Bryan (@JennyBryan) June 15, 2021
Just did a clean install and got my first chance to use this on my own behalf 😌https://t.co/Qwd8VzaCVn
🌹 Entrada de blog de Jenny Bryan
🌹 ¡Una manera de vivir, hum, trabajar!
✨ usethis::create_project()
✨
¿Qué hay en un nombre? Lo que llamamos rosa olería igual de dulce si tuviese cuálquier otro nombre.
Shakespeare en Romeo y Julieta. 🌹
¡Mentira cuando escribimos código! 😅
Legibles por una máquina (sin acentos);
Legibles por humanos (informativos sobre el contenido);
Combinan bien con el orden por defecto (AAAA-MM-DD en vez DD-MM-AAAA).
I didn't expect programming to involve so much time studying a thesaurus #namingThings
— Jenny Bryan (@JennyBryan) September 1, 2021
I learn English as a consequence to learn how to code. As I didn't know the human language, I could not link the names of functions, instructions, variables, etc., to previous knowledge. Today I still use Spanglish for comments, var, and dataset names. 👇 https://t.co/eRbjlIy66P
— Yanina Bellini Saibene (@yabellini) September 9, 2021
🌻 ¡RESPALDO! 🌻
Tu proyecto cambiará: ¿cómo registrar los cambios para poder viajar en el tiempo?
Fechas en nombres de archivos
o ✨ control de versiones ✨.
Aprender git: ¡difícil pero merece la pena! No R pero útil para R.
Poder intentar cosas, viajar en el pasado, entender cambios pasados.
XKCD de Randall Munroe.
Dibujo de Damien Cornu. ❤️
git add
para empezar a “seguir” un archivo (.gitignore
es la lista de los archivos que se ignoran siempre) ;
git commit
para registrar un cambio en la historia ;
git pull
/ git push
para descargar / cargar la versión local / remota (e.g. GitHub);
git checkout -b
para crear una rama (“branch”).
Mis preferencias 😁
usethis::use_git()
, usethis::use_github()
, etc.) y gert (gert::git_push()
) desde R mismo ;Primeros pasos de Git con R, Yanina Bellini Saibene & Marysol Gatti.
Excuse Me, Do You Have a Moment to Talk About Version Control?, Jenny Bryan.
Happy Git and GitHub for the useR, Jenny Bryan, the STAT 545 TAs, Jim Hester.
Reflections on 4 months of GitHub: my advice to beginners, Suzan Baert.
Isolar proyectos R, reiniciar R a menudo.
Nombrar bien a los archivos.
Utilizar control de versiones.
🌹 Good enough practices in scientific computing Wilson G, Bryan J, Cranston K, Kitzes J, Nederbragt L, et al. (2017) Good enough practices in scientific computing. PLOS Computational Biology 13(6): e1005510. https://doi.org/10.1371/journal.pcbi.1005510
🌹 What They Forgot to Teach You About R, Jenny Bryan, Jim Hester.
Escribes código magnífico para domar tus datos con paquete::funcion_fantastica()
…
¡Actualiza tu versión de paquete y no hay más funcion_fantastica()
!
Había buenas razones pero ahora tu código no funciona más. 😱
¡Encapsula tu proyecto! 🎉
Herramienta importante : ¡renv de Kevin Ushey!
Sucesor de packrat.
renv::init()
.
Instala y desinstala paquetes cómo usualmente. Regularmente renv::snapshot()
. Metadatos de las dependencias registrados en renv.lock
. 🔒
Tus compañer@s heredando tu proyecto utiliza renv::restore()
.
🐳 Docker? 🔒 Versión de R, sistema operativo, resumiendo: todo.
“Introduction to using Docker for reproducibility in R” by Malindrie Dharmaratne at R-Ladies Brisbane. Video recording, materials.
Lista de dependencias del proyecto.
La manera más facil de empezar es utilizar el paquete renv.
Datos o código para consegirlos desde una base de datos o un recurso remoto;
Codigo limpiando y analizando los datos;
Resultados en forma de gráfico, informe, etc.
Uniforme.
Creación automática.
… ¿En forma de paquete o no?
De Kenton White.
Love for ProjectTemplate, Hilary Parker (traducción mía 😅):
✅ “La rutina es tu amiga.”
✅ “Es más fácil empezar desde algo y después customizar que empezar desde 0.”
✅ “La reproducibilidad tiene que ser la más facil que se pueda.”
✅ “Encontrar cosas también debería ser lo más fácil posible.”
Para guardar funciones y datos utilizados en varios proyectos: ¡¡¡SI!!!
E.g. tutorial de Shel Kariuki en R-Ladies Nairobi.
Dependencias en DESCRIPTION
,
Funciones en R/
con documentación en man/
,
Datos en data/
(o data-raw/
),
Analsis cómo vignettes/vignetas (R Markdown),
README informativo.
🏄♂️ Re-utiliza o actualiza tus conocimientos sobre desarrollo de paquetes,
🏄♂️ Re-utiliza herramientas hechas para desarrollar paquetes (como devtools y usethis).
“Research compendium.” Packaging Data Analytical Work Reproducibly Using R (and Friends), Ben Marwick, Carl Boettiger & Lincoln Mullen (2018), The American Statistician, 72:1, 80-88, DOI: <10.1080/00031305.2017.1375986>
📦 rrtools de Ben Marwick. Crea un compendium!
📦 holepunch de Karthik Ram. Un clic y la persona leyendo tu repositorio puede experimentar con tu código! (🤫 holepunch también funciona sin la estructura de compendium.)
🚀 R-universe de Jeroen Ooms en rOpenSci para publicar tus análisis. ¡Entrada de blog en español por Yanina Bellini Saibene!
Project as an R package: An okay idea by Miles McBain.
“Mi repuesta a les defensores de proyectos en forma de paquetes es: ==Están perdiendo tiempo creando los paquetes equivocados.==”
“En vez de forzar su trabajo en el dominio de desarrollo de paquete, con la pérdida de fidelidad consiguiente, ¿por qué no estan creando paquetes que crean la experiencia fluida como con {devtools}/{usethis}, para su dominio?”
Como quieras 😉 (como tu equipo de trabajo quiera) pero
Estructura básica uniforme en el tiempo ;
Creación automática.
Haz que la reproducibilida sea ✨ más facil ✨.
¿Cómo transformas recursos y código en resultados de análisis (informes, graficos)?
🤸
¿Tal vez sólo necesitas el botón knit/tricotar si tu proyecto es un informe R Markdown?
¿Tal vez necesitas algo más complejo?
Optimizar una pipeline/tubería.
Registrar versiones de un análisis (lo que entra y lo que sale).
Optimizar una pipeline/tubería. 📦 targets mantenido por Will Landau.
Registrar versiones de un análisis (lo que entra y lo que sale). 📦 orderly mantenido por Rich FitzJohn.
targets adivina relaciones entre las piezas de un proyecto (e.g. si cambian los datos brutos, hay que rehacer todo) ;
targets sólo computa lo que hace falta.
Parte de la colección de paquetes de rOpenSci. Sucesor de drake del mismo autor.
A la raíz de cada proyecto targets, el archivo _targets.R
.
Cargar paquetes;
Cargar funciones (source()
archivos de R/
por ejemplo);
Definir targets/objetivos!
library("dplyr")
source("R/mis-funciones.R")
list(
tar_target(
archivo_datos_brutos,
"datos/datos_brutos.csv",
format = "file"
),
tar_target(
datos_brutos,
read_csv(archivo_datos_brutos, col_types = cols())
),
tar_target(
datos,
datos_brutos %>%
filter(!is.na(Ozono))
),
tar_target(hist, crea_grafico(datos)),
tar_target(modelo, calcula_modelo(Ozono ~ Viento + Temperatura, datos))
)
Para construir, targets::tar_make()
(y targets::tar_destroy()
);
Para entender tu “pipeline,” targets::tar_glimpse()
y otras funciones similares.
targets::tar_glimpse()
Ilustración del manual de targets.
Reproducible Computation at Scale in R with {targets} (Will Landau at RUG Lille).
Empieza con un proyecto pequeño (mi nivel 😅).
Conecta con otr@s usuari@s. 😉
An R package ecosystem for democratized reproducible pipelines at scale
Ecosistema de paquetes entorno de targets.
Vigila el repositorio GitHub de targets ;
Sigue Will Landau en Twitter ;
Subscribe a rOpenSci newsletter ;
(Gracias a Rich por contestar mis preguntas 🙏)
Problema diferente: registrar todo lo que entra y sale en y de un análisis, en diferentes versiones.
Por ejemplo permite hacer controles en el futuro, o combinar versiones para un analisis meta.
El analisis puede ser enorme, se necesita más que git para el respaldo.
En orderly hay repos y en repos hay “reports” (informes/tareas).
Ejemplo con un repo de una tarea. orderly::orderly_init("blop")
después orderly::orderly_new("example", "blop")
, un poco de copiar pegar y después tengo:
blop
├── orderly_config.yml
└── src
└── example
├── orderly.yml
└── script.R
src/example/orderly.yml
script: script.R
artefacts:
- staticgraph:
description: Un grafico de cosas
filenames: mi-grafico.png
- data:
description: Datos que utilize
filenames: mi-datos.csv
dat <- data.frame(x = 1:10, y = runif(10))
write.csv(dat, "mi-datos.csv", row.names = FALSE)
png("mi-grafico.png")
plot(dat)
dev.off()
id <- orderly::orderly_run("example", root = "blop")
Este borrador (recursos, programa, resultados, TODO) aparece en la carpeta draft/example/id-illegible
.
orderly::orderly_commit(id, root = "blop")
Este versión (recursos, programa, resultados, TODO) aparece en la carpeta archive/example/id-illegible
.
⚠️ Las carpetas archive y draft pueden ser enormes, hace falta un sistema de respaldo que no es git. ⚠️
(¡puedes utilizar git para las otras carpetas!)
Empieza con un proyecto pequeño (mi nivel 😅).
Conecta con otr@s usuari@s. 😉
Vigila el repositorio GitHub de orderly ;
Sigue el blog del equipo de desarrollo orderly ;
Sigue Rich FitzJohn en Twitter.
Antes del resumen, ¡gracias a las organizadoras! 🙏 Daniela Vázquez, Natalia da Silva, Paula Pereda-Suárez, Maine Fariello. 🙏
¡Gracias a tod@s! 🙏
Gracias a Yanina Bellini Saibene y María Rosa Morales por sus comentarios sobre las diapositivas!
Gracias a Christophe Dervieux por sus comentarios sobre el contenido de esta charla!
🌻 Principios fundamentales cómo isolar tu proyecto, respaldos.
🌻 Encapsular tu proyecto. (¿renv? ¿Docker?)
🌻 Estructura práctica, uniforme y automática. (¿en forma de paquete o no?)
🌻 Utilizar herramientas adaptadas para obtener resultados (¿optimizar una pipeline/tubería? ¿registrar todas las versiones?).
Otros recursos en inglés:
Course “Reproducible Research Data and Project Management in R” by Anna Krystalli.
Good enough practices in scientific computing Wilson G, Bryan J, Cranston K, Kitzes J, Nederbragt L, et al. (2017) Good enough practices in scientific computing. PLOS Computational Biology 13(6): e1005510. https://doi.org/10.1371/journal.pcbi.1005510
The Turing Way, an open source community-driven guide to reproducible, ethical, inclusive and collaborative data science.
🌹 Lee todo lo que escribe Jenny Bryan.
🌹 Elige o crea, con tu equipo, la caja donde pones y haces girar tu proyecto.
🌹 No tengas miedo de actualizar tus herramientas con el tiempo.
Diapositivas 🔗 https://rladiesmvd-maelle.netlify.app/