3 Initiation à R

Maintenant que vous avez installé R et Rstudio (voir section 2.2.1 et 2.3), vous allez écrire vos premières lignes de commande. Avant toute chose, le langage R possède une syntaxe propre, comme pour la langue française par exemple, qu’il faut respecter afin que votre ligne de commande soit interprétée correctement par la console R.

3.1 Avant de débuter quelques règles

Lorsque vous testez les exemples sur votre ordinateur et que vous n’obtenez pas le bon résultat, assurez-vous d’avoir bien écrit A L’IDENTIQUE la ou les lignes de commandes. Vous veillerez à respecter :

  • la ponctuation : ne remplacez par un . par une , et inversement parce que ça fait joli. Lorsque vous ouvrez une parenthèse ( assurez vous de bien la fermer ) quand c’est nécessaire.
  • la case : ne rajoutez pas de majuscules ou de minuscules inutilement
  • l’orthographe : relisez bien le nom des objets créés, parfois une erreur est simplement liée à une lettre oubliée dans le nom de l’objet.

Les espaces autour des opérateurs (+,-,*,/,…) ne sont pas pris en compte, ainsi les lignes suivantes sont toutes équivalentes :

2+2
2 + 2
2+ 2
2 +2
2              +                2

Dans vos lignes de commandes, nous privilégerons l’ajout d’un espace avant et après un opérateur pour la lisibilité du code.

Pour finir, vous allez probablement saisir des commandes incomplètes (oubli de parenthèse, faute de frappe,…). Dans ce cas, vous verrez apparaitre dans la console le signe + qui signifie l’attente de la suite de la commande.
Vous avez donc deux possibilités :

  • Vous complétez la commande puis vous la validez en appuyant sur Entrée.
  • Vous êtes perdus, appuyez alors sur la touche echap ou esc pour annuler la commande.

3.2 Démarrage de Rstudio

Lorsque vous lancez Rstudio une fenêtre apparait avec quatres panneaux (voir section 2.3 et la figure 2.3).
Dans un premier temps, nous allons nous concentrer sur la console (panneau B de la figure 2.3). Comme nous l’avons vu précédemment (voir section 2.2.2), la console est un invité de commande qui permet d’écrire et d’exécuter des commandes. Au démarrage, la console affiche un message de bienvenu qui comprend dans les 3ères lignes : la version du logiciel R et le système d’exploitation installé sur votre ordinateur5.

Le signe > signifie que la console est prête à recevoir une commande ce que nous allons nous empresser de faire et n’oubliez pas d’appuyer sur la touche Entrée pour exécuter la commande :

1+1
## [1] 2

Le résultat est quasi instantanée, mais vous verrez plus tard que certains calculs peuvent prendre plusieurs secondes ou minutes.

Essayez les exemples suivants qui font appel aux opérateurs mathématiques couramment utilisés :

100-250
## [1] -150
234*235
## [1] 54990
1200/325
## [1] 3.692308
13^2
## [1] 169

Dans Rstudio, il existe certains raccourcis clavier :

  • Alt + "-" : <-
  • Ctrl + "l" : Nettoie l’affichage de la console R

3.3 Les types de données

3.4 Les objets usuels

3.4.1 L’assignation

Pour réaliser des calculs, il est nécessaire d’assigner des valeurs, des objets dans d’autres objets plus ou moins complexes. Deux opérateurs peuvent être utilisés : <- ou =.

tata <- 1 signifie " on assigne la valeur 1 à l’objet tata "

a <- 12
a
## [1] 12

Dans l’exemple ci-dessus, nous avons assigné à l’objet a la valeur 12. Pour afficher, la valeur contenue dans l’objet a, il suffit de l’écrire dans une nouvelle ligne de commande.

Voici un petit exercice de réflexion :

Ecrivez la commande suivante tata <-1 dans la console R et comparez les résultats des commandes suivantes : tata et "tata". Que pouvez-vous en conclure. Vous trouverez la réponse dans la suite de ce chapitre.

3.4.2 Les vecteurs

Le vecteur est l’objet fondamental dans le langage R. Il se crée grâce à la fonction c() . Il possède une seule dimension, sa longueur. Il peut contenir plusieurs informations du même type.

Nous allons créé un vecteur nommé poids dans lequel nous allons assigner 7 valeurs numériques. Nous afficherons ensuite les valeurs contenues dans ce vecteur.

poids <- c(100,73,73,56,65,98,76)
poids
## [1] 100  73  73  56  65  98  76

Toutes les opérations mathématiques appliquées à un vecteur s’appliquent à chaque élément du vecteur. Par exemple, nous pouvons diviser le vecteur poids par 1000.

poids / 1000
## [1] 0.100 0.073 0.073 0.056 0.065 0.098 0.076

Nous pouvons également réaliser une opération entre deux objets :

cste <- 3
poids * cste
## [1] 300 219 219 168 195 294 228
taille <- c(23, 32, 45, 32, 65, 50, 24)
poids/taille
## [1] 4.347826 2.281250 1.622222 1.750000 1.000000 1.960000 3.166667

Vous remarquerez qu’à l’intérieur de la fonction c() nous utilisons des , et le séparateur de décimale est un .. Il faudra toujours respecter cette convention d’écriture.

Un vecteur numérique correspondant à une suite arithmétique de raison 1 peut être écrit de 4 manières différentes mais nous privilégerons la 4ème proposition :

  • c(1,2,3,4,5,6,7,8,9,10)
  • c(1:10)
  • 1:10
  • seq(from=1,to=10,by=1)

Un vecteur peut également contenir du texte (= chaînes de caractères). Une chaine de caractère contient du texte libre délimité par des guillemets simples ou doubles.

couleur <- c("rouge","noir","orange","#FFFFFF","#FEFEFE","purple")
couleur
## [1] "rouge"   "noir"    "orange"  "#FFFFFF" "#FEFEFE" "purple"

Pour accéder au ième élément d’un vecteur toto par exemple, il faut écrire toto[i]. Par exemple, si nous souhaitons afficher la 4ème valeur des vecteurs poids et couleur.

poids[4]
## [1] 56
couleur[4]
## [1] "#FFFFFF"

La longueur du vecteur est donnée par la fonction length().

length(poids)
## [1] 7
length(couleur)
## [1] 6

Un exercice pour se faire la main :

  • Créez un vecteur de votre choix numérique ou de caractères d’une longueur de 8 éléments. Vérifiez que votre vecteur contient bien 8 éléments

  • Trouvez les commandes pour afficher :

    1. la 5ème valeur
    2. simultanément la 2ème et la 8ème valeur
    3. les 5 dernières valeurs
    4. les 3 premières et la 7ème valeur

3.4.3 Les matrices

Une matrice est composée de n lignes et p colonnes avec n×p éléments. Tous les éléments sont du même type (numériques, texte, niveaux de facteur…). Une matrice a donc 2 dimensions. Pour créer une matrice, il faut utiliser la fonction matrix(). L’exemple ci-dessous représente une matrice à 3 lignes et 4 colonnes (3x4). Chaque élement de la matrice a une position (ou coordonnées) \(i,j\) avec \(i\) la ligne et \(j\) la colonne. Ainsi l’élément \(a_{2,3}\) se situe à l’intersection de la 2ème ligne et la 3ème colonne.

\[ \left(\begin{array}{cccc} a_{1,1} & a_{1,2} & a_{1,3} & a_{1,4}\\ a_{2,1} & a_{2,2} & a_{2,3} & a_{2,4}\\ a_{3,1} & a_{3,2} & a_{3,3} & a_{3,4} \end{array}\right) \]

Allez, nous allons créer notre première matrice à 3 lignes et 5 colonnes6 :

mat1 <- matrix(1:15,nrow=3,ncol=5,byrow = FALSE)
mat1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    4    7   10   13
## [2,]    2    5    8   11   14
## [3,]    3    6    9   12   15
mat2 <- matrix(1:15,nrow=3,ncol=5,byrow = TRUE)
mat2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15

Comme vous pouvez le constater les matrices mat1et mat2 sont agencées différemment. Cela est du à l’argument byrow de la fonction matrix. Si byrow=FALSE, la matrice est remplie colonne après colonne et si byrow=TRUE, la matrice est remplie ligne après ligne.

Il est également possible de créer des matrices à partir de plusieurs vecteurs en utilisant :

  • rbind() qui concatène les vecteurs en ligne
  • cbind() qui concatène les vecteurs en colonne.
vect1 <- c(2,4,1,5,5,8)
vect2 <- c(23,41,12,53,51,85)

mat3 <- rbind(vect1,vect2)
mat3
##       [,1] [,2] [,3] [,4] [,5] [,6]
## vect1    2    4    1    5    5    8
## vect2   23   41   12   53   51   85
mat4 <- cbind(vect1,vect2)
mat4
##      vect1 vect2
## [1,]     2    23
## [2,]     4    41
## [3,]     1    12
## [4,]     5    53
## [5,]     5    51
## [6,]     8    85

Vous remarquerez que la dimension de la matrice (non carrée7) change en fonction de l’utilisation de rbind() ou de cbind(). Pour visualiser les dimensions des matrices mat3et mat4, nous allons utiliser la fonction dim().

dim(mat3)
## [1] 2 6
dim(mat4)
## [1] 6 2

Pour afficher l’élément à la ième ligne et la jème colonne, il faut écrire toto[i,j]. Nous allons essayer d’afficher la valeur située entre la 2ème ligne et la 3ème colonne de la matrice mat3.

mat3[2,3]
## vect2 
##    12

Peut-on faire de même pour la matrice mat4? Si vous répondez oui, je vous conseille fortement de relire ce qui est juste au-dessus.

Lorsque l’on veut afficher uniquement une seule ligne ou une seule colonne, on écrit les commandes suivantes :

mat3[2,] #On affiche uniquement la deuxième ligne
## [1] 23 41 12 53 51 85
mat3[,4] #On affiche uniquement la quatrième colonne
## vect1 vect2 
##     5    53

Si vous souhaitez afficher plusieurs colonnes ou plusieurs lignes :

mat4[1:2,] #On affiche la première et la deuxième ligne de mat4
##      vect1 vect2
## [1,]     2    23
## [2,]     4    41
mat4[c(3,6),] #On affiche la troisième et la sixième ligne de mat4
##      vect1 vect2
## [1,]     1    12
## [2,]     8    85
mat4[-c(3,6),] #On supprime la troisième et la sixième ligne de mat4
##      vect1 vect2
## [1,]     2    23
## [2,]     4    41
## [3,]     5    53
## [4,]     5    51

Si vous avez compris vous pouvez faire la même chose avec la matrice mat3. Vous remarquerez l’utilisation du signe - pour supprimer certaines colonnes. Prenez le temps de chercher et de faire des erreurs, “C’est en forgeant que l’on devient forgeron.”.

Voici la solution :

mat3[,1:2] #On affiche la première et la deuxième colonne de mat3
##       [,1] [,2]
## vect1    2    4
## vect2   23   41
mat3[,c(3,6)] #On affiche la troisième et la sixième colonne de mat3
##       [,1] [,2]
## vect1    1    8
## vect2   12   85
mat3[,-c(3,6)] #On supprime la troisième et la sixième colonne de mat3
##       [,1] [,2] [,3] [,4]
## vect1    2    4    5    5
## vect2   23   41   53   51

3.4.4 Les tableaux de données (ou dataframe)

Le tableau de données est une évolution de la matrice. Les fonctions associées sont les mêmes. Les colonnes sont indépendantes les unes des autres, ainsi le tableau de données peut combiner différents types de données (numérique, caractère, facteur…). La seule contrainte est que tous les vecteurs doivent avoir la même longueur. Pour créer un tableau de données, il faut utiliser la fonction data.frame().

Pour l’exemple, nous allons créer un tableau à 3 colonnes : 1ère colonne = numérique, 2ème colonne = texte, 3ème colonne = facteur.

Taille.df <- data.frame(CSP = c("Ouvrier","Retraité","Cadre","Commerçant","Agriculteur"),
                        Sexe = factor(c("F","M","M","F","F")),
                        Taille_cm= c(155,170,175,173,180))
Taille.df 
##           CSP Sexe Taille_cm
## 1     Ouvrier    F       155
## 2    Retraité    M       170
## 3       Cadre    M       175
## 4  Commerçant    F       173
## 5 Agriculteur    F       180

Une originalité des tableaux de données par rapport aux matrices est qu’il est possible d’afficher une variable grâce à l’opérateur$.

Taille.df$CSP
## [1] "Ouvrier"     "Retraité"    "Cadre"       "Commerçant"  "Agriculteur"
Taille.df$Taille_cm
## [1] 155 170 175 173 180

On peut également grâce à l’opérateur $ créer de nouvelles variables.

Taille.df$Age <- c(34,69,43,32,54)
Taille.df
##           CSP Sexe Taille_cm Age
## 1     Ouvrier    F       155  34
## 2    Retraité    M       170  69
## 3       Cadre    M       175  43
## 4  Commerçant    F       173  32
## 5 Agriculteur    F       180  54

La librairie tidyverse propose un nouveau type de tableau de données les tidy data qui améliore principalement i) la sélection, ii) l’affichage et iii) la manipulation des données. L’utilisation cette librairie sera abordée dans la section 6.

Synthèse : L’indexation des objets

mon_vecteur[3] : affiche la troisième valeur du vecteur si sa longueur est supérieure ou égale à 3
mon_vecteur[-3] : supprime la troisième valeur du vecteur si sa longueur est supérieure ou égale à 3
mon_vecteur[c(4,8)] : affiche la 4ème et la 8ème valeur du vecteur si sa longueur est supérieure ou égale à 8
mon_vecteur[c(”nomelt1”, ”nomelt3”)] : affiche les valeurs correspondant aux noms ”nomelt1”, ”nomelt3” définis grâce à la fonction names()

Une matrice et un tableau de données ont deux dimensions (n lignes et p colonnes) :

ma_matrice[12] : affiche le 12ème élément lu verticalement
ma_matrice[2,3] : affiche la valeur à l’intersection de la 2ème ligne et de la 3ème colonne si la matrice a au moins 2 lignes et 3 colonnes.
ma_matrice[-2,3] : supprime les valeurs de la 2ème ligne et affiche les valeurs dans la 3ème colonne
ma_matrice[c(4,6),c(1,3)] : affiche les valeurs aux intersections des lignes 4 et 6 et des colonnes 1 et 3 si la matrice a au moins 3 colonnes et 6 lignes.
ma_matrice[-c(4,6),-c(1,3)] : affiche les valeurs absentes des lignes 4 et 6 et des colonnes 1 et 3 si la matrice a au moins 3 colonnes et 6 lignes.
ma_matrice[c(4,6),] : affiche les valeurs des lignes 4 et 6 pour toutes les colonnes
ma_matrice[,c(5,3)] : affiche les valeurs respectivement des colonnes 5 et 3 pour toutes les lignes.

mon_tableau$nomcolon1 : affiche toutes les valeurs de la colonne “nomcolon1”
mon_tableau$nomcolon1[3] : affiche la 3ème valeur de la colonne “nomcolon1”
mon_tableau[3, c(”nomcol1”, ”nomcol3”)] : affiche les valeurs à l’intersection de la ligne 3 et des colonnes “nomcolon1” et “nomcolon3”

3.4.5 Quelques précisions sur la création d’objets

  • Toujours donner un nom informatif aux objets.
    • Par exemple zostere_length.mean correspond à la longueur moyenne des feuilles de zostères.
    • zostere_drymass.sd correspond à l’écart-type du poids sec des feuilles de zostères.
  • Toujours créer des objets avec la syntaxe suivante nom<-contenu
  • Réservez la syntaxe suivante argument=contenu pour les fonctions
  • Ne jamais appeler deux objets par le même nom
  • Ne jamais donner à un objet le nom d’une fonction (évitez d’appeler un objet data)
  • Toujours coder les facteurs avec au moins une lettre pour éviter toute ambiguïté avec des vecteurs numériques.

3.5 Les fonctions

Une fonction est un « algorithme » qui exécute des calculs en fonction des arguments d’entrée (1 ou plusieurs) et qui retourne des résultats le cas échéant. Nous avons déjà vu plusieurs fonctions qui sont installées nativement dans R comme: c(), matrix(), data.frame(),…
Dans certains cas, vous serez amenés à créer vos propres fonctions pour simplifier votre script.

On définit une fonction de la manière suivante :

fun <- function(argument1, argument2,…) {expression}

  • fun : le nom de la fonction
  • arguments : liste des arguments
  • expression : corps de la fonction

Quand une fonction accepte plusieurs arguments, il est important de les appeler explicitement pour éviter d’attribuer à un argument une valeur qui était destinée à un autre argument.

Nous allons créer notre première fonction, c’est parti!!! Cette première fonction va vous permettre de convertir des degrés angulaires en radians. Il est important de trouver un nom pour la fonction qui soit explicite et concis. Dans notre cas notre fonction aura comme nom : deg2rad (degrees to radians = degrés en radians).
La fonction deg2rad() aura un seul argument nommé deg qui correspondra à un vecteur numérique. Nous utiliserons la formule suivante pour convertir les degrés en radians :

\[ rad = deg \times \frac{\pi}{180} \]

deg2rad <- function(deg)
{ 
  rad<- deg * (pi/180)
  return (rad)
}

La valeur de \(\pi\) est stockée dans l’objet pi ce qui évite l’approximation 3.14. La fonction return() permet d’afficher l’objet rad. Voici deux exemples pour illustrer l’utilisation :

deg2rad(deg=90)
## [1] 1.570796
deg2rad(deg=47)
## [1] 0.8203047

3.6 Le script : Un sauvegarde de vos commandes

Maintenant que vous êtes arrivés à cet endroit de chapitre, vous vous rendez compte que vous avez rédigé et éxécuté plusieurs commandes et malheureusement si vous quittez Rstudio ou que votre ordinateur s’arrête subrepticement vous allez TOUT perdre. Je vois déjà votre teint pâlir rien qu’à l’idée de tout perdre. Il existe une solution le script!

Le script correspond au panneau A de la figure 2.3. Pour créer un nouveau script, il faut cliquer sur File puis New File puis R script. Un onglet apparait qui s’intitule “Untitled1”, dans le menu File, cliquez sur Save as… pour enregistrer le script dans un dossier. Si une fenêtre encodage apparait choisissez “UTF8.”8

Le script est un document texte dans lequel on rédige toutes les commandes les unes en dessous des autres. Lorsque vous appuyez sur la touche Entrée cela ajoute un saut de ligne. Pour éxécuter une ligne de commande depuis le script, il faut utiliser la combinaison de touche Ctrl + +.

Pour faciliter la lecture du script, il doit être divisé en 3 grandes parties :

  1. L’en-tête avec la définition du répertoire de travail, les packages (= librairies) nécessaires à l’exécution du script
  2. Les fonctions que vous avez créées
  3. Le corps du script avec les calculs. Cette partie peut être subdivisée en sous-parties

3.7 Les packages ou librairies

Les packages (ou librairies) sont des ensembles de fonctions qui facilitent les analyses portant sur une thématique (biologie moléculaire, analyses de communautés, analyses spatio-temporelles, data-mining,…..)

Vous pouvez installer des packages selon deux méthodes :

  1. En écrivant dans la console R install.packages(”nomdupackage”).
  2. Soit en allant dans la fenêtre en bas à droite (panneau D de la figure 2.3) en cliquant sur l’onglet « Packages ».

Exemples de packages fréquemment utilisés : vegan, ade4, utils, ggplot2 …

Une fois la librairie installée, il faut la “charger” avant de pouvoir utiliser les fonctions qu’elle propose. Ceci se fait avec les fonctions library() ou require().

Vous pouvez dorénanvant tester vos connaissances concernant cette partie en cliquant sur le lien ci-dessous :


  1. Si vous souhaitez envoyer un message à un développeur ou une personne plus expérimentée, il faudra préciser dans votre message la version de votre logiciel R et votre système d’exploitation. Il également possible d’afficher les informations techniques avec la commande sessionInfo()↩︎

  2. N’oubliez pas que vous pouvez afficher l’aide avec la commande ?.↩︎

  3. Une matrice carrée d’ordre n est une matrice de dimension n × n, autrement dit une matrice à n lignes et n colonnes.↩︎

  4. https://www.w3.org/International/questions/qa-choosing-encodings#useunicode↩︎