# Dans l'air du temps : logiciel R

Sébastien Boutry

► To cite this version:

Sébastien Boutry. Dans l'air du temps : logiciel R. École d'ingénieur. Organisation et bonnes pratiques avec R, ENSEGID, France. 2023. hal-04235446

HAL Id: hal-04235446

https://hal.inrae.fr/hal-04235446

Submitted on 10 Oct 2023

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>
<figure><img src="image_2.png" /></figure>

# Dans l'air du temps

## Logiciel R

<figure><img src="image_3.png" /></figure>

<figure><img src="image_4.png" /></figure>

LICENCE OUVERTE
OPEN LICENCE

<figure><img src="image_5.png" /></figure>

RÉPUBLIQUE
FRANÇAISE

Liberté
Egalité
Fraternité

Sébastien Boutry

6/3/23
<figure><img src="image_6.png" /></figure>

<figure><img src="image_7.png" /></figure>

## Avantages :

* flexible

* pas de temps de compilation

<figure><img src="image_8.png" /></figure>

## Inconvénients :

* la vitesse d'exécution

<figure><img src="image_9.png" /></figure>
<figure><img src="image_10.png" /></figure>

Dans les années 1970, le langage S a été développé par l'entreprise Bell Laboratories ...que l'on retrouve dans le logiciel commercial S-Plus.

En 1996, deux chercheurs Ross Ihaka et Robert Gentleman (?@fig-createurs_R) (Ihaka and Gentleman 1996) proposent un nouveau langage pour les analyses statistiques et la production de graphiques se basant sur le langage S et Scheme.

<figure><img src="image_11.png" /><figcaption>Figure 1: A l'origine du projet R (source : wikipedia)</figcaption></figure>

<figure><img src="image_12.png" /></figure>

INRAO

Dans l'air du temps
Sébastien Boutry
S... puis R

<figure><img src="image_13.png" /></figure>

## le langage R

* un historique de plus de **27** ans

* logiciel **gratuit** (fait partie du projet GNU)

* langage

* de programmation complet

* un langage **interprété**

* basé sur la notion de **vecteur**

<figure><img src="image_14.png" /></figure>

## mais aussi

* un site internet The R Project for Statistical Computing

* une grande communauté

* plus de 19159 packages sur le CRAN (50 par défaut)

<figure><img src="image_15.png" /></figure>

INRAO

Dans l'air du temps
Sébastien Boutry
<figure><img src="image_16.png" /></figure>

# Le langage R

## Structure de R

* R est un **langage orienté objet**

* on va donc manipuler des objets

* qui sont caractérisés par
    * des **attributs** (classes, ...)
    * des **méthodes** (= fonctions)

## Fonctions génériques

Certaines fonctions (ex : *print()*, *plot()*, ...) peuvent être utilisées pour différentes classes d'objets.

<figure><img src="image_17.png" /></figure>

INRAE
Dans l'air du temps
Sébastien Boutry
Les principales classes des objets

► les vecteurs (classe élémentaire)

► les facteurs (variable qualitative)

► les matrices / les tableaux (2 dimensions)

► les listes

► les data frases (cas particulier)

► les fonctions

► ...
## Grands principes de R

* **l'affectation** : on affecte une sortie d'une commande à un objet existant ou nouveau

* **l'indexation** : simplifie nos extractions à partir des noms de colonnes ou indice mais aussi à partir de conditions logiques

* **l'approche matricielle** : on privilégie une approche iterative (par boucle) en mettant en place le calcul matriciel (gain de temps)

<figure><img src="image_18.png" /></figure>

INRAE
Dans l'air du temps
Sébastien Boutry
<figure><img src="image_19.png" /></figure>

# Pourquoi utiliser R ?

* **mémoire** des commandes à l'aide d'un script (X au logiciel clic-bouton)

* automatisation des tâches avec les **fonctions**

* accès aux lignes de commandes des fonctions

* **grande diversité** de packages

* variétés des analyses

* souvent à la pointe des nouveaux développements

* **lisibilité et reproductibilité** du code et des traitements

* **gratuit** (licence GNU)

* **en constante évolution**

* tous les 6 mois pour le logiciel R

* tous les mois pour de nouveaux packages

* **communauté R dynamique**

* slack (groupe Grrr)

* réseaux sociaux (twitter #rstats)

* blogs R-Bloggers, ThinkR, DellaData, Analyse-R, R-atique...

* meetups (RLadies, )/ formations

* frrrenchies

<figure><img src="image_20.png" /></figure>

INRAO

Dans l'air du temps
Sébastien Boutry
.jpg.gpkg
.img.json.shp
.xls.html
.rds.dat.txt.csv.grd
.zip.sql.xlsx.ods.bib.svg
.tiff.rdata.nc.gpx
.png
▶ Principes de la programmation

Selon Gilles Hunault, (ancien maitre de conférence de l'Université d'Angers),

► "Programmer, c'est réfléchir et organiser"

► "Programmer, c'est choisir et expliciter ses choix"

► "Programmer, c'est tester, prévoir et valider"

► "Programmer demande de l'endurance, de la précision et de la rigueur"

<figure><img src="image_21.png" /></figure>
<figure><img src="image_22.png" /></figure>

Carayon, David. 2023. *InraeThemes: Modèles Et Thèmes INRAE*. https://davidcarayon.github.io/InraeThemes/.

Ihaka, Ross, and Robert Gentleman. 1996. "R: A Language for Data Analysis and Graphics." *Journal of Computational and Graphical Statistics* 5 (3): 299-314.

<figure><img src="image_23.png" /></figure>

INRAE

Dans l'air du temps
Sébastien Boutry
► Supports pour construire ce diaporama

Les cours de :

► Frédéric Chiroleu (chercheur au Cirad de la Réunion)

► Vincent Goulet "Introduction à la programmation en R"

► Ewan Gallic

Le thème :

► InraeThemes (Carayon 2023)

<figure><img src="image_24.png" /></figure>

INRAE

Dans l'air du temps
Sébastien Boutry
<figure><img src="image_25.png" /></figure>

# Bonnes pratiques

## sous R

<figure><img src="image_26.png" /></figure>

<figure><img src="image_27.png" /></figure>

RÉPUBLIQUE
FRANÇAISE

Liberté
Egalité
Fraternité

Sébastien Boutry, Maud Pierre et Eric Quinton

Invalid Date

<figure><img src="image_28.png" /></figure>

LICENCE OUVERTE
OPEN LICENCE
<figure><img src="image_29.png" /></figure>

# Installation

<figure><img src="image_30.png" /></figure>

<figure><img src="image_31.png" /></figure>

Suivre les instructions sur le site Posit

<figure><img src="image_32.png" /></figure>

R

<figure><img src="image_33.png" /></figure>

RStudio environnement de développement intégré (IDE)

<figure><img src="image_34.png" /></figure>

INRAO

Bonnes pratiques
Sébastien Boutry, Maud Pierre et Eric Quinton
<figure><img src="image_35.png" /></figure>

## Modules (packages)

Un module rassemble une ou plusieurs fonctions ou jeux de données sur un theme ou une application. On peut trouver les packages sur le site du RCran

* par thématique *Task Views*

* par mots-clés

mais aussi sur la plate-forme GitHub.

Un module **installé, n'est pas chargé**

<figure><img src="image_36.png" /></figure>
<figure><img src="image_37.png" /></figure>

## Rproject

### Création

New Project/New Directory or Existing Directoring
Avec les Rprojects, on ne travaille plus qu'en chemin relatif.

### Créer votre arborescence de projet

<figure><img src="image_38.png" /><figcaption>Figure 3: Structure de repertoire (source : Sébastien Boutry)</figcaption></figure>

<figure><img src="image_39.png" /></figure>

INRAO
## Raccourcis dans RStudio :

::: (.cell-output-display)

<table><thead><tr><td>Action</td><td>Raccourcis</td></tr></thead><tbody><tr><td>Assignation</td><td>Alt+6</td></tr><tr><td>Indentation</td><td>Ctrl+1</td></tr><tr><td>Pipe</td><td>Ctrl+Shift+M</td></tr><tr><td>Commenter/Décommenter</td><td>Ctrl+Shift+C</td></tr><tr><td>Autocomplétion</td><td>Ctrl+Espace</td></tr></tbody></table>

:::

## Visibilité du code

### FiraCode : police

#### Sous Linux :

* sudo apt install fonts-firacode

#### Sous Windows :

* Lien de téléchargement

INRAC

#### Les ligatures :

<figure><img src="image_40.png" /></figure>

<figure><img src="image_41.png" /></figure>

<figure><img src="image_42.png" /></figure>

<figure><img src="image_43.png" /></figure>
Addin RStudio : Styler (Müller and Walthert 2022)

install.packages("styler")

<figure><img src="image_44.png" /></figure>

INRAO

Bonnes pratiques

Sébastien Boutry, Maud Pierre et Eric Quinton
<figure><img src="image_45.png" /></figure>

# Organiser

Faire des **schémas** des différentes **étapes** afin de
**structurer** son code

* **fragmentation** en plusieurs scripts

* redondance de partie -> **automatisation**

## Création d'un workflow

* Graphviz /Draw.io /... / Mermaid

* Package : DiagrammeR (lannone 2022)

remotes::install_github("jimhester/DiagrammeR")

<figure><img src="image_46.png" /></figure>

<figure><img src="image_47.png" /></figure>
► Cahier d'analyses (numérique)

► un cahier par projet

► différents formats possibles (.txt, .rmd (r markdown), .qmd (quarto))

<figure><img src="image_48.png" /></figure>

INRAE

Bonnes pratiques
Sébastien Boutry, Maud Pierre et Eric Quinton
<figure><img src="image_49.png" /></figure>

# Bibliographie

Carayon, David. 2023. *InraeThemes: Modèles Et Thèmes INRAE*. https://davidcarayon.github.io/InraeThemes/.

Iannone, Richard. 2022. *DiagrammeR: Graph/Network Visualization*. https://github.com/rich-iannone/DiagrammeR.

Müller, Kirill, and Lorenz Walthert. 2022. *Styler: Non-Invasive Pretty Printing of R Code*. https://CRAN.R-project.org/package=styler.

Ushey, Kevin. 2022. *Renv: Project Environments*. https://CRAN.R-project.org/package=renv.

<figure><img src="image_50.png" /></figure>

INRAE

Bonnes pratiques
Sébastien Boutry, Maud Pierre et Eric Quinton
<figure><img src="image_51.png" /></figure>

# Programmation dans R

## Les objets dans R

<figure><img src="image_52.png" /></figure>

<figure><img src="image_53.png" /></figure>

LICENCE OUVERTE
OPEN LICENCE

<figure><img src="image_54.png" /></figure>

RÉPUBLIQUE
FRANÇAISE

Liberté
Egalité
Fraternité

Sébastien Boutry

Invalid Date
<figure><img src="image_55.png" /></figure>

Quelques recommandations

► L'affectation, l'utilisation de <- est conseillé pour affecter la sortie d'une commande dans un objet. Le signe = marche mais il est préférable de se le garder pour l'utilisation des arguments d'une fonction.

► Commenter les scripts, il faut bien sûr commenter le plus possible son script afin de faciliter la transmission.

► Choisir un convention de nommage des objets "snake_case" par exemple

<figure><img src="image_56.png" /></figure>
Réflexes sous R

<figure><img src="image_57.png" /></figure>

<figure><img src="image_58.png" /></figure>

LICENCE OUVERTE
OPEN LICENCE

<figure><img src="image_59.png" /></figure>

RÉPUBLIQUE
FRANÇAISE

Liberté
Egalité
Fraternité

Sébastien Boutry

Invalid Date