class: center, middle, inverse, title-slide # “Débuter” avec
… ## En Commençant par le Début … ### Mickaël Canouil,
Ph.D.
(
mickael.canouil.fr
) ###
Inserm U1283 / CNRS UMR8199 / Institut Pasteur de Lille / Université de Lille
### Dernière mise à jour : 24-08-2021 --- # Les débuts avec <i class="fab fa-r-project"></i> .center[<img src = "data:image/png;base64,#content/media/r_first_ahorst.png" width = "45%" />] --- # <i class="fab fa-r-project"></i> .center[<img src = "data:image/png;base64,#content/media/R-startup.svg" width = "70%" />] .footnote[ [Thomas Lin Pedersen <i class="fab fa-twitter"></i>](https://twitter.com/thomasp85/status/961553618196418560) ] -- <img src = "data:image/png;base64,#content/media/shocked-face-with-exploding-head_1f92f.png" style = "position: absolute; top: 40%; left: 45%"/> --- # <i class="fab fa-r-project"></i> .center[<img src = "data:image/png;base64,#content/media/R-startup-all.svg" width = "70%" />] .footnote[ [Thomas Lin Pedersen <i class="fab fa-twitter"></i>](https://twitter.com/thomasp85/status/961553618196418560) ] --- class: part-slide # Sauvegarder<br>le code<br>...<br>pas l'environnement ! --- # Sauvegarder le code .pull-left.font150[ Les scripts : * "*standards*" dans un fichier `.R` * "*Rmarkdown*" dans un fichier `.Rmd` ] .pull-right.font150[ Les "données" : * un objet dans un `.rds` * une liste d'objet dans un `.Rdata` ] --- class: part-slide # Utiliser un IDE<br><img src = "data:image/png;base64,#content/media/nerd-face_1f913.png" /><br>("Integrated Development Environment") --- # Utiliser un IDE .font150[ * RStudio : https://www.rstudio.com/products/rstudio/download/#download * Emacs + ESS : https://ess.r-project.org * vim + Nvim-R : https://medium.com/free-code-camp/turning-vim-into-an-r-ide-cd9602e8c217 * Visual Studio + RTVS : https://docs.microsoft.com/en-us/visualstudio/rtvs ] --- class: part-slide # Faire<br>*Table Rase*<br>à<br>Chaque Démarrage ! --- # Faire *table rase* à chaque démarrage ! .center[<img src = "data:image/png;base64,#content/media/R-startup-session.svg" width = "70%" />] --- # Faire *table rase* à chaque démarrage ! .center[<img src = "data:image/png;base64,#content/media/R-startup-session-zoom.svg" />] --- # Faire *table rase* à chaque démarrage ! .font150[ Lorsque vous quittez <i class="fab fa-r-project"></i> : * Ne pas enregistrer votre espace de travail (*workspace*<sup>*</sup>) ! Lorsque vous démarrez <i class="fab fa-r-project"></i> : * Ne pas charger l'espace de travail sauvegardé précédemment ! ] .footnote.font150[ <sup>*</sup> Le *workspace* est automatiquement sauvegardé/chargé via un fichier nommé `.Rdata` (là où s'execute <i class="fab fa-r-project"></i>). ] --- # Faire *table rase* ! Dans Windows .center[<img src = "data:image/png;base64,#content/media/rwindows.png" />] --- # Faire *table rase* ! Dans RStudio (*Tools > Global options*) .center[<img src = "data:image/png;base64,#content/media/rstudio.png" />] --- # Faire *table rase* ! .pull-left.font150[ + Dans un Terminal .center[<img src = "data:image/png;base64,#content/media/terminal.svg" />] ] .pull-right.font150[ + `.bash_profile` .center[<img src = "data:image/png;base64,#content/media/bash_profile.svg" />] ] --- class: part-slide # Comment Réinitialiser <i class="fab fa-r-project"></i> ?<br><img src = "data:image/png;base64,#content/media/thinking-face_1f914.png" /> --- class: part-slide # Avec<br>`rm(list = ls())`<br>? --- # Avec `rm(list = ls())`? .center[<img src = "data:image/png;base64,#content/media/face-screaming-in-fear_1f631.png" />] .font150[ > If the first line of your R script is > > `rm(list = ls())` > > I will come into your office and SET YOUR COMPUTER ON FIRE 🔥. > > --- Jenny Bryan ] --- # Que ne fait pas `rm(list = ls())` ? .font150[ * Réinitialiser la session <i class="fab fa-r-project"></i> en cours * Réinitialiser les `options()` → `options(stringsAsFactors = FALSE)`<sup>*</sup> * Réinitialiser le répertoire de travail `getwd()` → `setwd()` * Réinitialiser les extensions <i class="fab fa-r-project"></i> attachées ] .footnote.font150[ <sup>*</sup>Valeur par défaut <i class="fab fa-r-project"></i> v4.0.0 ([Kurt Hornik: stringsAsFactors](https://developer.r-project.org/Blog/public/2020/02/16/stringsasfactors/)). ] --- # Mais alors que fait `rm(list = ls())` ? ```r help(rm) ``` .center[<img src = "data:image/png;base64,#content/media/rm-doc.png" />] --- class: part-slide # Comment réinitialiser <i class="fab fa-r-project"></i> ?<br><img src = "data:image/png;base64,#content/media/thinking-face_1f914.png" /> --- class: part-slide # Redémarrer <i class="fab fa-r-project"></i> !<br><img src = "data:image/png;base64,#content/media/grinning-face-with-one-large-and-one-small-eye_1f92a.png" /> --- # Réinitialiser <i class="fab fa-r-project"></i> .font150[ * Dans une console <i class="fab fa-r-project"></i> * Via le raccourci `Ctrl+D` * Via la fonction `q()` dans une console <i class="fab fa-r-project"></i> ] --- # Réinitialiser <i class="fab fa-r-project"></i> .pull-left.font150[ * Dans RStudio : * Via le raccourci `Ctrl+Shift+F10` * Via le menu ] .pull-right[ .center[<img src = "data:image/png;base64,#content/media/restartr.png" />] ] --- class: part-slide # Démarrage de <i class="fab fa-r-project"></i><br>`.Renviron` & `.Rprofile` --- # `.Renviron` & `.Rprofile` * `.Renviron` - contient des variables d'environnement * `.Rprofile` - contient du code <i class="fab fa-r-project"></i> .center[<img src = "data:image/png;base64,#content/media/R-startup-dotfiles.svg" width = "60%" />] --- # `.Renviron` * `.Renviron` - contient des variables d'environnement .center[<img src = "data:image/png;base64,#content/media/R-startup-environ-zoom.svg" />] --- # `.Renviron` * `.Renviron` - contient des variables d'environnement ```r R_MAX_NUM_DLLS=300 GITHUB_PAT=abc123 TZ='Etc/UTC' R_LIBS_USER=~/R/%p/%v ``` La variable `R_PROFILE_USER` permet de définir à partir de quel répertoire le `.Rprofile` est chargé. ```r R_PROFILE_USER=~/.Rprofile # Par défaut ``` --- # `.Rprofile` .center[<img src = "data:image/png;base64,#content/media/R-startup-dotfiles.svg" width = "70%" />] --- # `.Rprofile` .center[<img src = "data:image/png;base64,#content/media/R-startup-profile-zoom.svg" />] --- # Peut-on mettre tout dans `.Rprofile` ? .font120[ * Définir un dépôt CRAN * Écrire un message d'accueil * Personnaliser l'invite de commandes * Modifier les options d'affichage (*p.ex.*, largeur en nombre de caractères `options(width = 120)`) * Charger des extensions <i class="fab fa-r-project"></i> fréquemment utilisées * Ajouter des raccourcis et/ou alias à des fonctions * ... ] .center.font150[Mais, **ATTENTION** !] --- # `.Rprofile` et reproductibilité .font150[ Ce qui figure dans le fichier `.Rprofile` : * Ne doit avoir aucune incidence sur un script `.R` ou `.Rmd` * A pour objectif d'être utilisé uniquement de façon interactive (directement dans la console) ] ```r options(repos = c(CRAN = "https://cran.rstudio.org")) if (interactive()) { options(width = 120) } ``` --- # `.Rprofile` et reproductibilité .center[<img src = "data:image/png;base64,#content/media/R-startup-profile.svg" width = "70%" />] Le `.Rprofile` est chargé dans l'environnement à chaque execution d'un processus R (`Rscript` et `R`). --- # Mon `.Rprofile` .pull-left[ .center[<img src = "data:image/png;base64,#content/media/Rprofile_code.png" width = "100%" />] ] .pull-right[ .center[<img src = "data:image/png;base64,#content/media/Rprofile_console.png" width = "95%" />] ] .footnote[ [<i class = "fab fa-github"></i> GitHub](https://github.com/mcanouil/mctemplates/blob/master/R/rprofile.R) ] --- # Désactiver les fichiers de démarrage .font150[ * `--vanilla` - pour désactiver le chargement de **tous les fichiers** de démarrage * `--no-init-file` - pour désactiver le chargement du fichier `.Rprofile` * `--no-environ` - pour désactiver le chargement du fichier `.Renviron` ] --- class: part-slide # `setwd(...)` en première ligne ... --- # `setwd(...)` en première ligne ... .center[<img src = "data:image/png;base64,#content/media/face-screaming-in-fear_1f631.png" />] .font150[ > If the first line of your R script is > > `setwd("C:\Users\jenny\path\that\only\I\have")` > > I will come into your office and SET YOUR COMPUTER ON FIRE 🔥. > > --- Jenny Bryan ] --- class: part-slide # Faisons le Point sur `setwd()` !<br><img src = "data:image/png;base64,#content/media/face-with-uneven-eyes-and-wavy-mouth_1f974.png" /> --- # Faisons le Point sur `setwd()` ! .pull-left.code150[ ```r library(ggplot2) setwd("/path/to/a/directory/on/my/laptop/data") df <- read.delim("data.csv") p <- ggplot(df, aes(x, y)) + geom_point() ggsave("../figs/scatterplot.png") ``` ] .pull-right.code150[ ```r library(ggplot2) setwd("/path/to/a/directory/on/my/laptop/data") df <- read.delim("data.csv") p <- ggplot(df, aes(x, y)) + geom_point() setwd("/path/to/a/directory/on/my/laptop/figs") ggsave("scatterplot.png") ``` ] --- # Faisons le Point sur `setwd()` ! .center[<img src = "data:image/png;base64,#content/media/setwd_example.png" width = "80%" />] --- # L'extension <i class = "fab fa-r-project"></i> `here` .pull-left[ .center[<img src = "data:image/png;base64,#content/media/here_ahorst.png" />] ] .pull-right.code60[ ```r here::here() ``` ``` #> [1] "D:/Profils/mcanouil/PROJECTS/mc-rstartup" ``` ```r here::i_am("rstartup.Rmd") ``` ``` #> here() starts at D:/Profils/mcanouil/PROJECTS/mc-rstartup ``` ```r here::i_am("content/content.Rmd") ``` ``` #> here() starts at D:/Profils/mcanouil/PROJECTS/mc-rstartup ``` ```r fs::dir_tree(here::here(), recurse = FALSE) ``` ``` #> D:/Profils/mcanouil/PROJECTS/mc-rstartup #> +-- assets #> +-- content #> +-- docs #> +-- LICENSE.md #> +-- README.md #> +-- README.Rmd #> +-- rstartup.Rmd #> +-- rstartup.Rproj #> \-- thumbs ``` ] --- # Utiliser un Mode "Projet" via une IDE .font150[ * Démarrer un projet A : 1. Démarre R. 2. Défini le répetoire de travail de R comme la racine du projet A. * Passer d'un projet A à un project B : 1. Redémarre R. 2. Défini le répetoire de travail de R comme la racine du projet B. ] --- # Utiliser un Mode "Projet" .font150[ * [__"What They Forgot to Teach You About R"__](https://rstats.wtf/project-oriented-workflow.html) --- Jenny Bryan & Jim Hester * [__"Project-oriented Workflow"__](https://www.tidyverse.org/articles/2017/12/workflow-vs-script/) --- Jenny Bryan ] --- # Workflow .center[<img src = "data:image/png;base64,#content/media/workflow_ahorst.jpg" width = "80%"/>] --- # Lectures Utiles .font150[ * [__"Code Smells and Feels"__](https://www.youtube.com/watch?v=7oyiPBjLAWY) --- Jenny Bryan * [__"Advanced R"__](https://adv-r.hadley.nz/) --- Hadley Wickham * [__"Project-oriented Workflow"__](https://www.tidyverse.org/articles/2017/12/workflow-vs-script/) --- Jenny Bryan * [__"R for Data Science"__](https://r4ds.had.co.nz/) --- Garrett Grolemund & Hadley Wickham * [__"What They Forgot to Teach You About R"__](https://rstats.wtf/) --- Jenny Bryan & Jim Hester ] --- class: part-slide # <img src = "data:image/png;base64,#https://avatars1.githubusercontent.com/u/8896044" height = "150px" id = "picture" /> .center[ <a href = "https://mickael.canouil.fr" target = "_blank"><i class = "fas fa-home"></i> mickael.canouil.fr</a> .column[ <a href = "https://www.linkedin.com/in/mickael-canouil/" target = "_blank"><i class = "fab fa-linkedin"></i> mickael-canouil</a> ] .column[ <a href = "https://github.com/mcanouil/" target = "_blank"><i class = "fab fa-github"></i> mcanouil</a> ] .column[ <a href = "https://twitter.com/mickaelcanouil/" target = "_blank"><i class = "fab fa-twitter"></i> @mickaelcanouil</a> ] ]