3. Utiliser R

3.1. Exécuter des commandes R

On peut exécuter des commandes R dans 2 modes différents:

  • R étant un langage interprété, les instructions peuvent être entrées directement dans la console de RStudio. Cette façon de faire est intéressante pour vérifier le comportement d’une fonction élémentaire ou pour exécuter des tâches brèves.

  • on peut également grouper les instructions dans un fichier .R avec l’éditeur de texte de RStudio (ou un autre) et exécuter la totalité des instructions en une seule opération, via la commande source().

3.2. Obtenir de l’aide

Le temps consacré à ce cours ne permet pas de devenir un R guru et il fait partie du processus de développement de faire appel à internet.

3.2.1. Aide intégrée

Pratique, la documentation de R est disponible via l’onglet Help de RStudio et son module de recherche.

3.2.2. Ressources externes

La recherche sollicitant des ressources externes doit explicitement mentionner le nom du package tidyverse lorsqu’on le connait, et a minima l’écosystème tidyverse lui même lorsqu’on ne le connait pas.

Le site StackOverFlow comporte généralement des réponses complètes et argumentées.

3.3. Commandes R

Une instruction élémentaire de R consiste en une expression, que l’on affecte ou pas à une variable.

Ceci est une expression:

> library(tidyverse) # "import" des packages de Tidyverse
> starwars %>% filter(species == "Droid")
# A tibble: 6 x 14
  name  height  mass hair_color skin_color eye_color birth_year sex   gender homeworld species films
  <chr>  <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr>  <chr>     <chr>   <lis>
1 C-3PO    167    75 NA         gold       yellow           112 none  mascuTatooine  Droid   <chr2 R2-D2     96    32 NA         white, blred               33 none  mascuNaboo     Droid   <chr3 R5-D4     97    32 NA         white, red red               NA none  mascuTatooine  Droid   <chr4 IG-88    200   140 none       metal      red               15 none  mascuNA        Droid   <chr5 R4-P96    NA none       silver, rred, blue         NA none  feminNA        Droid   <chr6 BB8       NA    NA none       none       black             NA none  mascuNA        Droid   <chr# … with 2 more variables: vehicles <list>, starships <list>

Cette expression est évaluée, affichée mais le résultat n’est plus accessible.

Pour réutilisation ultérieure, on peut affecter le résultat de l’évaluation d’une expression à une variable, et dans ce cas le résultat n’est pas affiché:

> d <- starwars %>% filter(species == "Droid")

On peut placer plusieurs commandes sur la même ligne en les séparant avec un ;:

> d <- starwars %>% filter(species == "Droid") ; class(d)
[1] "tbl_df"     "tbl"        "data.frame"

Les accolades { et } sont utilisées pour définir des blocs de commandes dans Les fonctions, Instructions groupées et structures de contrôle, etc…

Les commentaires sont identifiés par le caractère # qui permet d’ignorer tout ce qui suit.

Si une commande est incomplète, un prompt secondaire + est affiché sur les lignes suivantes, jusqu’à ce que la commande soit syntaxiquement correcte.

> starwars %>%
+ filter(species == "Droid")
# A tibble: 6 x 14
  name  height  mass hair_color skin_color eye_color birth_year sex   gender homeworld species films
  <chr>  <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr>  <chr>     <chr>   <lis>
1 C-3PO    167    75 NA         gold       yellow           112 none  mascuTatooine  Droid   <chr2 R2-D2     96    32 NA         white, blred               33 none  mascuNaboo     Droid   <chr3 R5-D4     97    32 NA         white, red red               NA none  mascuTatooine  Droid   <chr4 IG-88    200   140 none       metal      red               15 none  mascuNA        Droid   <chr5 R4-P96    NA none       silver, rred, blue         NA none  feminNA        Droid   <chr6 BB8       NA    NA none       none       black             NA none  mascuNA        Droid   <chr# … with 2 more variables: vehicles <list>, starships <list>

Important

En R, <- est l’opérateur d’affectation. Plus de détails ultérieurement.

3.4. Exécuter les commandes contenues dans un fichier

Lors de la phase de conception du process de traitement des données, il est pratique de travailler en mode interactif à partir de la console R. Lorsque les instructions sont regroupées dans un fichier, on exécute celles ci avec la commande source:

> source("commands.R")

3.5. Stockage des résultats

On peut intercepter les résultats des commandes, avec la fonction sink(). Tous les affichages sont redirigés vers un fichier texte:

> sink("result.txt")
> starwars %>% filter(species == "Droid")

On rétablit l’affichage dans la console avec sink():

> sink()
> starwars %>% filter(species == "Droid")
# A tibble: 6 x 14
  name  height  mass hair_color skin_color eye_color birth_year sex   gender homeworld species films
  <chr>  <int> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr>  <chr>     <chr>   <lis>
1 C-3PO    167    75 NA         gold       yellow           112 none  mascuTatooine  Droid   <chr2 R2-D2     96    32 NA         white, blred               33 none  mascuNaboo     Droid   <chr3 R5-D4     97    32 NA         white, red red               NA none  mascuTatooine  Droid   <chr4 IG-88    200   140 none       metal      red               15 none  mascuNA        Droid   <chr5 R4-P96    NA none       silver, rred, blue         NA none  feminNA        Droid   <chr6 BB8       NA    NA none       none       black             NA none  mascuNA        Droid   <chr# … with 2 more variables: vehicles <list>, starships <list>

3.6. Persistence des données

Les structures que R crée et manipule en mémoire s’appelent des objets dans le vocabulaire R, bien qu’il n’y ait (presque) aucune similitude avec les objets des langages orientés objet (Python, Java, etc…).

Dans R Studio ces objets sont présentés (par ordre alphabétique) dans l’onglet « Environment », avec une brève description. On peut les afficher sous la forme d’une simple liste dans la console avec la fonction objects() or ls(). La collection des objets présents en mémoire s’appelle l’espace de travail.

> objects()
[1] "d"
> ls()
[1] "d"

Pour retirer un ou plusieurs objets de l’environnement, on utilise la fonction rm():

> rm(d)
> ls()
character(0)

La fonction rm() accepte également un vecteur en paramètre. Si celui ci est initialisé avec la liste de tous les objets, ils sont tous détruits:

> rm(list = ls())

Tous les objets créés durant une session R peuvent être stockés sur le disque pour réutilisation ultérieure. Lorsqu’on tente de fermer une session, la possibilité de sauvegarder ces objets est proposée. Si on répond par l’affirmative, ils sont stockés dans le fichier .RData dans le répertoire courant.

L’ensemble des commandes utilisées au cours de la session est stocké dans le fichier .Rhistory.

Si ces fichiers sont présents, ils sont utilisés au redémarrage d’une nouvelle session.

Important

Pour une bonne structuration du travail, il est très fortement recommandé de créer un répertoire distinct pour chaque projet, chaque étude.

3.7. Manipuler les fichiers et les répertoires

L’IDE R Studio propose une interface de manipulation des fichiers et des répertoires mais il peut être nécessaire d’y accéder via la console. Dans ce cadre getwd() retourne le chemin du répertoire courant:

> getwd()
[1] "C:/Users/courivad/Documents"

et setwd() est utilisée pour changer de répertoire:

> setwd('C:\\dir1\\dir2') # (Windows only)
> setwd('C:/dir1/dir2') # (Windows & Linux)
> setwd(file.path('C:', 'dir1', 'dir2')) #  (Windows & Linux)::

> setwd("c:/Users/courivad/Documents/R")
> getwd()
[1] "c:/Users/courivad/Documents/R"

La fonction dir() retourne le contenu du répertoire courant (fichiers et répertoires), et list.dirs() retourne le contenu du répertoire courant (uniquement les répertoires)