Maëlle Salmon 🏠 https://masalmon.eu 🐦 ma_salmon
Licence CC-BY-SA
Je vais partager des astuces et outils !
Mais d’abord, qui suis-je ?
Diverses missions pour rOpenSci, notamment maintenance du package dev guide. 🔧
Travail sur la prochaine version de pkgdown. ✨
Livre “HTTP testing in R” avec Scott Chamberlain. 📖
Cours “Scientific Rmd blogging”. 📝
Compte Twitter de R-Ladies Global. 🐦
Éditrice pour le système de revue de paquets de rOpenSci. 📦
Diverses présentations de partage de connaissances. 😉
Que chacun·e apprenne au moins une chose nouvelle. 😁
⚒️ Principes de base pour les projets R ;
⚒️ Comment protéger votre projet des changements extérieurs ;
⚒️ Comment structurer votre projet ;
⚒️ Comment faire tourner votre projet.
😿 Pas demandé par le Petit Prince.
😺 Améliorer la vie de toute personne touchant à ou lisant vos résultats et leur origine. Reproducibilité.
😹 Toujours de quoi s’améliorer ou procrastiner.
😦 Pas régulièrement en charge d’analyses.
😄 Assez au courant des nouveautés de R.
“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 est aussi une excellente source de bonnes idées ! 💐
Logo par Martin Monkman.
Un projet, un dossier !
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
The only two things that make @JennyBryan 😤😠🤯. Instead use projects + here::here() #rstats pic.twitter.com/GwxnHePL4n
— Hadley Wickham (@hadleywickham) December 11, 2017
Illustration par Allison Horst.
On met un fichier texte vide nommé.here
à la racine du projet.
Les chemins sont définis par rapport à cela.
here::here()
[1] "/home/maelle/Documents/conferences/rr2021"
here::here("data")
[1] "/home/maelle/Documents/conferences/rr2021/data"
Redémarrer R régulièrement et sans peur !
Ne JAMAIS sauver et recharger .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
🌹 Article de blog de Jenny Bryan
🌹 Une manière de vivre, euh, travailler !
✨ usethis::create_project()
✨
Qu’y a-t-il dans un nom ? Ce que nous appelons rose, par n’importe quel autre nom sentirait aussi bon.
Shakespeare dans Roméo et Juliette.
Pas vrai pour écrire du code ! 😅
Lisibles par des machines (pas d’accent)
Lisibles par des humains (indicatifs du contenu)
Vont bien avec l’ordre par défaut (AAAA-MM-JJ plus que JJ-MM-AAAA)
🌻 Sauvegardez vos fichiers ! 🌻
Votre projet va évoluter, comment garder la trace des changements pour pouvoir revenir en arrière ?
dates dans noms de fichiers
ou contrôle de version.
Apprendre git : pas simple, mais ça vaut la peine ! Pas du R mais utile pour faire du R.
Pouvoir mieux faire des essais, revenir en arrière, comprendre les changements.
XKCD par Randall Munroe.
Dessin par Damien Cornu. ❤️
git add
pour commencer à suivre un fichier (.gitignore
pour lister les fichiers à ignorer) ;git commit
pour enregistrer un changement dans l’historique ;git pull
/ git push
pour télécharger / publier la version locale dans la version distante (sur GitHub ?);git checkout -b
pour créer une “branche.”Mes préférences 😁
usethis::use_git()
, usethis::use_github()
, etc.) et gert (gert::git_push()
) pour ne pas quitter R ;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.
Isoler les projets, redémarrer R régulièrement.
Bien nommer ses fichiers.
Utiliser le contrôle de version.
🌹 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.
Vous faites une belle manipulation de données avec paquet::ma_fonction_favorite()
…
Et un peu plus tard cette fonction disparaît du paquet.
Pour de bonnes raisons mais votre script est-il cassé ? 😱
Encapsuler votre projet ! 🎉
Outil indispensable : renv de Kevin Ushey !
Successeur de packrat.
renv::init()
On installe et enlève des paquets 🎵 comme d’habitude 🎵. Régulièrement renv::snapshot()
. Métadonnées des dépendances automatiquement stockées dans le fichier renv.lock
. 🔒
Votre collègue qui hérite du projet fait renv::restore()
.
🐳 Docker ? 🔒 Version de R, système opératoire, tout quoi.
Là, il faut lire tout ce qu’a écrit Colin Fay. 👋 Colin !
Bien lister les dépendances du projet.
Le plus simple pour commencer, adopter renv.
Des données ou comment les obtenir,
Du code (pas dupliqué, en fonctions),
Des résultats dans un rapport, des tableaux, figures…
Toujours la même.
Création automatisable.
… Paquet ou pas ?
By Kenton White.
Love for ProjectTemplate, Hilary Parker:
✅ “La routine est votre amie.”
✅ “Il est plus simple de customiser quelque chose qui existe que de commencer de rien.”
✅ “La reproducibilité doit être la plus facile possible.”
✅ “Trouver des choses doit être aussi facile que possible.”
Pour réduire ses craintes, il faut se dire que ce n’est ni plus ni moins qu’un dossier organisé d’une manière contrainte.
🏄♂️ Surfer sur ses connaissances de développement (ou les rafraîchir),
🏄♂️ Surfer sur les outils existants (devtools & 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>
Les dépendances dans DESCRIPTION
,
Les fonctions dans R/
avec documentation dans man/
,
Les données dans data/
(ou data-raw/
),
Les analyses comme vignettes (R Markdown),
Un README explicatif.
📦 rrtools de Ben Marwick fournit des instructions, modèles, fonctions pour faire un compendium basique adapté à la rédaction d’un article ou rapport reproductible avec R.
📦 holepunch de Karthik Ram permet de reproduire votre analyse sur un serveur Binder ! (🤫 marche aussi sans la structure de compendium)
🚀 R-universe par Jeroen Ooms à rOpenSci pour publier vos analyses.
Project as an R package: An okay idea de Miles McBain.
Un peu une usine à gaz ? 🏭
“Ma réponse aux promoteurs du projet comme paquet: ==Vous gaspillez un temps précieux en faisant les mauvais paquets.==”
“Au lieu de faire rentrer votre travail dans le domaine du développement de paquet, avec la perte de fidélité induite, pourquoi ne faites-vous pas un paquet d’outils qui crée l’expérience fluide à la {devtools}/{usethis} pour votre domaine ?"
Comme on veut 😉 (comme votre équipe veut) mais
structure de base constante dans le temps ;
création automatisable.
Rendre la reproductibilité ✨ plus facile ✨.
Comment allez-vous de vos scripts et données à vos résultats (rapport, figures) ?
🤸
Peut-être que cliquer sur le bouton tricot suffit ?
Mais peut-être pas, selon le cas ?
Optimiser une pipeline.
Garder les traces des différentes versions d’un rapport (entrées et sorties).
Optimiser une pipeline. 📦 targets maintenu par Will Landau.
Garder les traces des différentes versions d’un rapport (entrées et sorties). 📦 orderly maintenu par Rich FitzJohn.
targets déduit les relations entre les morceaux de vos projets (e.g. si les données brutes changent, il faut tour refaire) ;
targets ne fait que les calculs nécessaires.
Le paquet fait partie de la collection de rOpenSci. Successeur du paquet drake du même auteur.
Au centre d’un projet targets, le script _targets.R
.
On y charge les paquets;
On y charge les fonctions (source()
de scripts dans R/
par exemple);
On y définit les cibles !
list(
tar_target(
raw_data_file,
"data/raw_data.csv",
format = "file"
),
tar_target(
raw_data,
read_csv(raw_data_file, col_types = cols())
),
tar_target(
data,
raw_data %>%
filter(!is.na(Ozone))
),
tar_target(hist, create_plot(data)),
tar_target(fit, biglm(Ozone ~ Wind + Temp, data))
)
Beaucoup de flexibilité notamment et des cibles communes pratiques dans tarchetypes e.g. tarchetypes::tar_age()
.
Pour construire, targets::tar_make()
(et targets::tar_destroy()
)
Pour comprendre sa pipeline, targets::tar_glimpse()
&co.
targets::tar_glimpse()
Illustration du manuel de targets.
Le manuel !
Reproducible Computation at Scale in R with {targets} (Will Landau au RUG Lille).
Commencer avec un petit projet (mon niveau actuel 😅).
An R package ecosystem for democratized reproducible pipelines at scale
Suivre le dépôt de targets ;
Suivre Will Landau ;
S’abonner à la lettre d’informations de rOpenSci ;
Trouver un groupes d’autres utilisateurs·rices. 😉
(Merci à Rich d’avoir répondu à mes questions 🙏)
Pour un problème différent : garder la trace de tout ce qui entre et sort d’une analyse à différents points.
Par exemple pour permettre de futurs audits.
L’analyse peut être énorme donc git pas adapté.
Dans orderly on a des repos (dépôts) et dans les repos on définit des reports (rapports).
Exemple avec un dépôt d’un rapport. orderly::orderly_init("blop")
et orderly::orderly_new("example", "blop")
, modification de fichiers.
blop
├── orderly_config.yml
└── src
└── example
├── orderly.yml
└── script.R
src/example/orderly.yml
script: script.R
artefacts:
- staticgraph:
description: A graph of things
filenames: mygraph.png
- data:
description: Data that went into the plot
filenames: mydata.csv
dat <- data.frame(x = 1:10, y = runif(10))
write.csv(dat, "mydata.csv", row.names = FALSE)
png("mygraph.png")
plot(dat)
dev.off()
id <- orderly::orderly_run("example", root = "blop")
Elle (resources, script, résultats, tout quoi !) apparaît dans le dossier draft/example/id-illisible
.
orderly::orderly_commit(id, root = "blop")
Elle (resources, script, résultats, tout quoi !) apparaît dans le dossier archive/example/id-illisible
.
⚠️ Les dossiers archive et draft peuvent être énormes, à vous de les sauvegarder pas avec git. ⚠️
Le site de documentation d’orderly est vraiment top !
Commencer petit pour bien comprendre (encore une fois, mon niveau 👋).
Suivre le dépôt d’orderly ;
Suivre le blog de l’équipe qui développe orderly ;
Suivre Rich FitzJohn sur Twitter.
Avant de résumer, merci à l’équipe d’organisation et de programmation des rencontres R 2021, et à vous tou·te·s ! 🙏 ✨
Merci beaucoup à Christophe Dervieux pour ses remarques pertinentes sur le contenu de cette présentation !
🌻 Bons principes de base comme isolation du projet, sauvegardes.
🌻 Encapsulage du projet. (renv ? Docker ?)
🌻 Structure pratique, plutôt constante, automatisable. (paquet ou pas ?)
🌻 Outils de construction adaptés (bouton tricot ? targets ? orderly ?)
Exemples de références truffées d’éléments utiles :
Cours “Reproducible Research Data and Project Management in R” d’Anna Krystalli.
Guide “Organisation d’un projet collaboratif de publication PROPRE” de Sébastien Rochette.
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.
🌹 Lire toute l’oeuvre de Jenny Bryan.
🌹 Choisir ou même créer (en équipe) la boîte dans laquelle on met et construit le projet.
🌹 Ne pas avoir peur de changer d’outils au fil du temps.
Diapos 🔗 https://rr2021.netlify.app/