2 les bases

A l’instar des autres langages, R a besoin d’un environnement de développement intégré (IDE) pour être utilisé. En plus d’une console interactive, l’IDE propose plusieurs fonctionnalités. Nous en verrons quelques-unes plus tard.
R est intégré par plusieurs logiciels tels que R lui-même, IntelliJ IDE, Rcode etc. Tout au long de cet ouvrage nous n’utiliserons que RStudio qui est l’un des IDE les plus célèbres de R.

2.1 Interface

Console
L’interface RStudio se présente ainsi par défaut. Nous pouvons voir une console, un environnement de travail, une partie pour les scripts et une autre pour la visualisation des graphiques.

  • La console peut servir à écrire une ligne d’instruction qui sera exécutée en appuyant sur Entrer.
  • La partie dédiée au scripts permet d’écrire un ensemble de lignes de codes qui peuvent être exécutées par ordre voulu par l’utilisateur. En plus des scripts, on peut y visualiser nos tableaux de données qui sont décrits dans la section 2.3.5.
  • Les graphes peuvent être visibles dans la partie Plots de notre interface. Cette partie est un panneau contenant les onglets Viewer pour les pages html, Files pour naviguer dans les fichiers, Packages pour gérer les packages installés et Help pour chercher de l’aide.
  • La dernière partie c’est à dire Environment est consacrée à la gestion de l’environnement de travail. Elle permet de voir les variables créés lors de notre session mais aussi d’avoir une idée sur leur structure

2.2 Premiers codes

Et si on écrivait notre premier code ? Dans la section précédente nous avons présenté brièvement l’interface de RStudio, place maintenant à notre première instruction. Commencez par effectuer une petite opération d’addition (2+3) sur votre console puis appuyez sur Entrer.

2+3
#> [1] 5

Le résultat obtenu est tout naturellement 5. Vous constatez que [1] précède le résultat de l’opération, en effet l’affichage se fait par défaut sous forme d’une liste2.3.3.
La console peut être utilisée comme une calculatrice et supporte toutes les opérations arithmétiques telles que la soustraction(-), l’addition(+), la multiplication(*), la division décimale(/), la division entière(%/%), le modulo1 (%%).
Le symbole (#) sert à écrire une ligne de commentaire.

1+2 #addition

1-2 #Soustraction

1/2 #Division decimale

1%/%2 #Division entiere

1%%2 #Modulo

On peut aussi effectuer des assignations sans déclarer les variables au préalable comme l’indique le code suivant.

x = 1 #affection de la valeur 1 à x
y <- 2 #affection de la valeur 2 à y
x+y #somme de x et y (1+2)
#> [1] 3

2.3 Données sur R

Il existe 6 principaux types simples de données sur R sont : logical, integer, double, complex, character, raw.
Il arrive qu’une structure de données se compose de types simples données, c’est ce que nous allons étudier dans cette section.

2.3.1 Vecteur

Définition

Le vecteur est un objet de base de R qui correspond à une liste d’éléments. Ses propriétés fondamentales sont :

  • Dimension unitaire (les vecteurs sont unidimensionnel)
  • Éléments de même type (Toutes les valeurs contenues dans un vecteur sont de même type)
  • Longueur égale au nombre d’éléments

Création

La fonction la plus classique pour créer un vecteur est c(...). Elle prend comme argument les éléments du vecteur. Dans le code suivant, nous allons créer un vecteur contenant les valeurs de 1 jusqu’à 5 puis nous allons le nommer myvector

myvector <- c(1,2,3,4,5) #Création
myvector #Affichage
#> [1] 1 2 3 4 5

Maintenant que nous avons un vecteur, il est naturel de se demander comment accéder aux éléments de ce dernier. Facile ! Il suffit de mettre entre crochet ([]), juste après le nom de votre vecteur, l’indice de l’élément voulu sachant que sur R le comptage commence par 1 au lieu de 0. Par exemple, dans la cellule suivante, le code permet d’afficher le quatrième élément c’est-à-dire celui qui a pour indice 4 de myvector.

myvector[4]
#> [1] 4

Vous pouvez aussi supprimer un élément d’un vecteur en essayant de l’afficher avec l’opposé de son indice. Supprimons le premier élément de myvector !

myvector[-1]
#> [1] 2 3 4 5

Il se peut qu’on veuille créer une séquence de valeurs avec un pas spécifié. Un exemple concret c’est de vouloir créer un vecteur nommé evenVector contenant tous les nombres pairs compris entre 0 et 100. L’utilisation de la fonction c() rendrait le travail fastidieux. La fonction seq() est plus adaptée à notre situation. Elle prend comme argument from(le début de la séquence), to(la fin de la séquence), by(le pas de la séquence), etc. Pour en savoir plus vous pouvez exécuter la commande ?seq().

evenVector <- seq(from = 0, to = 100, by = 2) #Création 
evenVector #Affichage
#>  [1]   0   2   4   6   8  10  12  14  16  18  20  22  24  26
#> [15]  28  30  32  34  36  38  40  42  44  46  48  50  52  54
#> [29]  56  58  60  62  64  66  68  70  72  74  76  78  80  82
#> [43]  84  86  88  90  92  94  96  98 100

Si le pas de la séquence est de 1, on peut utiliser à la place de seq() l’opérateur : de premier terme le début de la séquence et de second terme la fin de la séquence. L’exemple qui suit permet de créer le vecteur myvector contenant tous les entiers de 1 à 5.

myvector <- 1:5
myvector
#> [1] 1 2 3 4 5

Il est possible de créer un vecteur d’éléments répétitifs avec la fonction rep(). Supposons que nous voulons créer le vecteur repvector contenant 5 fois de suite tous les entiers de 1 à 10, nous allons donner en premier argument à la fonction rep() l’objet à répéter (1:10) et comme second argument le nombre de répétitions(5).

repvector <- rep(1:10,5)
repvector
#>  [1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6  7  8
#> [19]  9 10  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6
#> [37]  7  8  9 10  1  2  3  4  5  6  7  8  9 10

2.3.2 Facteur

Définition

Le facteur (factor) est un vecteur de valeurs d’une variable catégorielle. Très souvevent, les variables qualitatives sont catégorielles c’est le cas du sexe(Homme, Femme), des questions directes(Oui, Non), etc.C’est d’ailleurs la raison de l’existance de cet objet sur R qui est très utiles dans certaines representations graphiques.Le caractère principal de factor est qu’il dispose de niveaux appelés levels. Ces derniers sont uniques et peuvent avoir des valeurs qui ne sont pas contenus par le facteur.

Création

Pour créer un facteur, on commence par créer un vecteur puis avec la fonction factor() nous pouvons le transformer en objet de type facteur. Par défaut, les niveaux des facteurs sont les modalités prises par le vecteur. Pour modifier les niveaux on utilise l’argument levels de la fonction factor() pour spécifier notre vecteur de niveaux. On se propose de transformer en facteur le vecteur animal de modalités chat, souris, chien en un facteur de niveaux chat, souris, chien et rat.

animal <- c("souris","souris","chien","chat","chien","chat","souris","chat","chat","chien")
myfactor <- factor(animal,levels = c('chat','souris','chien','rat'))
myfactor
#>  [1] souris souris chien  chat   chien  chat   souris chat  
#>  [9] chat   chien 
#> Levels: chat souris chien rat

2.3.3 Liste

Définition

Une liste est un objet pouvant contenir des éléments de tous types. L’homogénéité du type des éléments n’est pas obligatoire dans une liste c’est à dire qu’elle peut contenir des listes, des vecteurs, des matrices, des fonctions etc. On peut nommer les éléments d’une liste lors de sa création en effectuant des affections.

Création

La création d’une liste se fait avec la fonction list() qui prend en argument les éléments à concaténer.

mylist = list(num = c(1,2,3), char = 'character')
mylist
#> $num
#> [1] 1 2 3
#> 
#> $char
#> [1] "character"

On peut accéder à un élément par son nom en utilisant le symbole $ (malist$nomElement). L’accès à l’élément num de mylist peut se faire de la manière suivante :

mylist$num
#> [1] 1 2 3

Un autre moyen d’accéder à un élément d’une liste c’est par son indice mis entre deux crochets ([[index]]) juste après le nom de la liste. On peut reprendre l’accès à l’élément num par indexation.

mylist[[1]]
#> [1] 1 2 3

On peut modifier l’élément num de mylist en lui affectant une nouvelle valeur.

mylist$num = 1:10
mylist$num
#>  [1]  1  2  3  4  5  6  7  8  9 10

L’ajout d’un nouvel élément dans mylist peut aussi se faire facilement. Si on se propose d’ajouter un élément nommé logical qui reçoit initialement TRUE on peut procéder ainsi :

mylist$logical = TRUE
mylist
#> $num
#>  [1]  1  2  3  4  5  6  7  8  9 10
#> 
#> $char
#> [1] "character"
#> 
#> $logical
#> [1] TRUE

2.3.4 Matrice

Définition

Une matrice est un un tableau dont les colonnes sont des vecteurs de même type et de même taille. Autrement dit, la matrice est un objet de deux dimensions dont tous les éléments sont de type homogène. R ne considère pas un vecteur comme une matrice colonne ou ligne, ce sont deux types de structures différentes.

Création

Une matrice colonne se crée avec la fonction cbind() et la matrice ligne par rbind(). Pour créer une matrice de plusieurs colonnes on utilise la fonction matrix(). Vous pouvez avoir une documentation complète de ces fonctions en exécutant la commande faisant précéder d’un point d’interrogation le nom de votre fonction ( Exemple : ?cbind()) dans votre console.

#matrice colonne
colMatrix <- cbind(1:5)
colMatrix
#>      [,1]
#> [1,]    1
#> [2,]    2
#> [3,]    3
#> [4,]    4
#> [5,]    5
#matrice ligne
rowMatrix <- rbind(1:5)
rowMatrix
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    1    2    3    4    5
#matrice
Matrix <- matrix(c(x= (1:5), y = rep(1,5)),nrow = 5)
Matrix
#>      [,1] [,2]
#> [1,]    1    1
#> [2,]    2    1
#> [3,]    3    1
#> [4,]    4    1
#> [5,]    5    1

On peut accéder aux éléments de la matrice par leurs indices. Comme on le fait en maths, il faut d’abord mettre le numéro de la ligne puis le numéro de la colonne séparée par une virgule. On peut afficher une ligne (respectivement une colonne )toute entière en spécifiant seulement l’indice de la ligne (respectivement la colonne).

# Accès à l'élément de la ligne 4 et de la colonne 1
Matrix[4,1]
#> [1] 4
# Accès à  la ligne 2 
Matrix[2,]
#> [1] 2 1
# Accès à la colonne 3
Matrix[,2]
#> [1] 1 1 1 1 1

2.3.5 Tableau de données ou Data frame

Définition

Un tableau de données (data frame) est comme la matrice, un objet de deux dimensions sauf qu’il peut contenir des colonnes de types différents. Chaque colonne doit contenir des éléments de même type. La data.frame est un objet très utilisé sur R et ce sera le cas dans les chapitres suivants de ce livre.

Création

La fonction data.frame() permet de créer un tableau de données. Elle prend en argument des vecteurs de même longueur. Il en existe d’autres arguments pour cette fonction, pour en savoir plus vous pouvez exécuter ?data.frame().

x = c(12,67,13)
y = c('A','B','C')
tableau = data.frame(x,y)
tableau
#>    x y
#> 1 12 A
#> 2 67 B
#> 3 13 C

L’accès à un élément peut se faire de la même manière qu’avec les matrices. Pour accéder à une colonne par son nom on utilise le symbole $ comme dans la section liste. Les codes suivants permettent d’accéder à l’élément “B” du tableau de plusieurs façons.

#Indexiation
tableau[2,2]
#> [1] "B"
#Par le nom de la colonne
tableau$y[2]
#> [1] "B"
tableau[['y']][2]
#> [1] "B"

2.4 Les boucles et conditions

2.4.1 Les boucles

Les boucles permettent de gérer des instructions répétitives. Sur R il est plus pratique d’utiliser la vectorisation, mais pour débuter, les boucles feront l’affaire.

for

La boucle for permet d’itérer sur un vecteur de longueur connu d’avance. La syntaxe est la suivante :

for (variable in vector) {
  statements
}

Un exemple de création d’un vecteur de 5 éléments contenant les carrés des nombre compris entre 1 et 5

#Initialisation
carrevector = 0
#Boucle
for (i in 1:5) {
  carrevector[i]=i^2
}
#affichage
carrevector
#> [1]  1  4  9 16 25

While

Si le nombre d’itérations n’est pas connu d’avance alors que la condition d’arrêt si, il est préférable d’utiliser la boucle while. Elle permet de répéter une instruction tant qu’une condition est satisfaite. la syntaxe est la suivante :

while (condition) {
  statements
}

Avec la boucle while on peut chercher le premier élément supérieur à 10 dans carrevector. Les deux conditions d’arrêts sont alors : l’élément(x) supérieur à 10 et(&) l’indice(j) supérieur à la longueur du vecteur(5).

# Initialisation
j = 1
# Boucle
while (carrevector[j]<=10 & j<= 5){
  j=j+1
}
x=carrevector[j]
# Affichage
x
#> [1] 16

2.4.2 Les conditions

Elles permettent d’exécuter des instructions si une ou des conditions sont satisfaites. la syntaxe la plus simple est :

if (condition) {
  #statements
}else{
  #statements
}

Exemple :

num = 10
if (num > 0) {
  print('Ce nombre est positif')
}else{
  print('Ce nombre est negatif')
}
#> [1] "Ce nombre est positif"

2.5 Les fonctions

Si dans un projet vous aurez à utiliser plusieurs fois un bloc d’instructions, l’idéal c’est de créer des fonctions. Pour cela, on a besoin de function() que l’on assigne au nom de notre fonction. Les fonctions peuvent retourner une valeur ou bien exécuter seulement un ensemble d’instructions.

mafonction  <- function(arguments) {
  instructions
  return(valuer)
}

Pour créer la fonction addition qui somme deux éléments x et y on procède ainsi :

addition <- function(x,y){
  return(x+y)
}
#Ou bien
addition <- function(x,y){
  x+y
}

Pour utiliser la fonction il suffit de l’appeler en indiquant les valeurs de ses arguments entre parenthèses.

# somme de 10 et de 4
addition(10,4)
#> [1] 14