Вы находитесь на странице: 1из 10

Probablités et Statistiques LF2Info

Institut Supérieur d’Informatique


et Mathématiques Monastir
Département des Mathématiques
AU 2019-2020

TP 2 : Les structures sous R(partie2)

Objectif :‚ Maîtriser la manipulation des différentes structures de données sous R.

1 Les matrices
On définit une matrice à l’aide de la fonction matrix. Les options ncol et nrow per-
mettent de définir les dimensions de la matrice.

Example

Que donnent les instructions suivantes, conclure


Instruction 1 :
> Ma <- matrix(0, nrow = 2, ncol = 3)
> Ma
Instruction 2 > M <- matrix(rep(1 :2, 3), nrow = 2, ncol = 3)
>M
Instruction 3 :
> X <- matrix(1 :12,nrow=4,ncol=3,byrow=TRUE)
>X
Instruction 4 :
> Y <- matrix(1 :12,nrow=4,ncol=3,byrow=FALSE)
>Y
> class(Y)

1.1 Manipulation des matrices

Pour connaître les dimensions d’une matrice, on utilise la fonction dim (la fonction
length retourne le nombre d’éléments de la matrice) :
> dim(M)
23
> length(M)
6

On a aussi la possibilité d’attribuer des noms aux lignes et aux colonnes d’une matrice
via l’option dimnames (ces noms doivent être de type character ).

Olfa Selmi 1
Probablités et Statistiques LF2Info

a Extraction

Pour extraire des éléments d’une matrice X, on peut utiliser deux approches, chacune
ayant une syntaxe propre.
1. L’extraction par indice : Xrindl , indc s, où indl désigne le vecteur des indices des
lignes et indc désigne le vecteur des indices des colonnes à extraire. L’omission de
indl (respectivement de indc ) signifie que l’on sélectionne toutes les lignes (respec-
tivement les colonnes).
Notons également que l’on peut faire précéder indl et/ou indc du signe moins (-)
pour indiquer plutôt les éléments à ne pas extraire.
2. L’extraction par masque logique : Xrmasques, où masque est une matrice de logiques
TRUE/FALSE de la même taille que X indiquant quels éléments extraire.
Example
Voici quelques exemples utilisant la première approche :
> Mat <- matrix(1 :12,nrow=4,ncol=3,byrow=TRUE)
> Mat
> Mat[2,3]
( Extraction de l’élément à l’intersection ligne 2/colonne 3.)
> Mat[,1]
( On prend toutes les lignes, et seulement la colonne 1).
> Mat[c(1,4),]
(On prend toutes les colonnes, et les lignes 1 et 4).
> Mat[3,-c(1,3)]
( On prend la ligne 3 et la colonne 2).

Exemple

> MatLogique <- matrix(c(TRUE,FALSE),nrow=4,ncol=3)


> MatLogique
(Possède la même taille que Mat.)
Que donne l’instruction suivante
> Mat[MatLogique]

la fonction which() permet de récupérer les indices des éléments de la matrice qui
vérifient une certaine condition. Exemple

> m <- matrix(c(1,2,3,1,2,3,2,1,3),3,3)


>m
> which(m == 1)
( m est considérée comme un empilement de ses colonnes.)

Que donne l’instruction


> which(m == 1,arr.ind=TRUE) ?

Olfa Selmi 2
Probablités et Statistiques LF2Info

1.2 Insertion

On peut rajouter des lignes (fonction rbind) ou des colonnes (fonction cbind) à une
matrice existante ( concaténer des matrices).
Exemple
Que donnent les instructions suivantes ?
> cbind(M, c(7, 7))
> rbind(M, c(8, 8, 8))
> cbind(M, M)

L’insertion d’éléments procède de la même manière que dans le cas vectoriel. Il faut utiliser
le symbole d’affectation <- pour remplacer des éléments, sélectionnés soit au moyen de
leurs indices, soit par masque logique, par d’autres éléments.
Exemple
Exécuter les instructions suivantes et conclure
>m
> m[m !=2] <- 0
>m
> Mat <- Mat[-4,]
> Mat
m[Mat>7] <- Mat[Mat>7]
>m

Exercice 1 Exécuter les insructions suivantes :


> m1 <- matrix(c(0,22,0,23,34,0,0,0,28),ncol=3)
> m2 <- matrix(c(10,1,4,10,9,9,2,6,4),ncol=3)
> m1
> m2
Remplacez toutes les valeurs non nulles de m1 par les valeurs de m2 correspondantes, puis
enlevez la deuxième colonne de m1 .

Exercice 2 1. Définir avec deux manière la matrice suivante


¨ ˛
1 4 7
A“ ˝ 2 5 8 ‚
3 6 9
2. Définir la matrice B en concaténant sous la matrice A la ligne (1, 1, 1).
3. Calculez la dimension de B.
4. On accède aussi aux éléments d’une matrice avec les crochets []. Quels sont les ré-
sultats des commandes suivantes ?
> M[1,3]
> M[,1]
> M[2,]
> M[2,c(1,3)]

Olfa Selmi 3
Probablités et Statistiques LF2Info

2 Les tableaux
La fonction array() permet de créer des matrices multidimensionnelles à plus de deux
dimensions comme cela est illustré sur la figure suivante (pour un array ayant trois di-
mensions).

> X <- array(1 :12,dim=c(2,2,3))


>X
> class(X)

2.1 Manipulation des tableaux

Exécuter les instructions suivantes et conclure :

A <- array(1 :12,dim=c(2,2,3))


>A
> A[2,2,1]
> A[1,2,3] <- 4
> which(A==4,arr.ind=TRUE)
> A[which(A==4,arr.ind=TRUE)]
> length(A[A>4])

Olfa Selmi 4
Probablités et Statistiques LF2Info

3 Les listes
La structure du langage R la plus souple et à la fois la plus riche est celle de la liste.
Contrairement aux structures précédentes, les listes permettent de regrouper dans une
même structure des données de types différents sans pour autant les altérer. De façon
générale, chaque élément d’une liste peut ainsi être un vecteur, une matrice, un array ou
même une liste.
Example
Vérifier que donne les instructions suivantes :
Instruction 1 :

> L1 <- list(x,M,"blabla")


> class(L1)
Instruction 2
L2 <- list(TRUE,-1 :3,matrix(1 :4,nrow=2),c(1+2i,3), "Une chaîne de caractères")
> class(L2)

3.1 Extraction

L’extraction dans les listes est légèrement plus compliquée que dans les matrices.
Chaque élément d’une liste est en effet lui-même une liste. L’utilisation de la fonction
"["() sur une liste renvoie donc une autre liste.

On peut accéder aux éléments de la liste en utilisant les crochets :


que donne la commande suivante ?
> L1[[2]]
Il est souvent plus agréable de donner un nom aux différents objets que contient la liste :
> L2 <- list(VecteurDeL2=x, ChaineDeL2 = "blablaba")
> L2
$ VecteurDeL2
2.0 6.0 5.0 8.0 1.0 3.0 9.0
$ ChaineDeL2
"blablaba"
Il est alors aussi possible d’accéder aux éléments de la liste en utilisant ses noms prédéfi-
nis : que donne la commande suivante ?
> L2$ VecteurDeL2

Exemple
Conclure à partir des résultats des instructions suivantes :
L <- list(12,c(34,67,8),Mat,1 :15,list(10,11))
> class(L)
>L
> L[2]

Olfa Selmi 5
Probablités et Statistiques LF2Info

> class(L[2])
> L[c(3,4)]

Puisqu’une liste est faite pour stocker des éléments de nature différente, il faudra utili-
ser la fonction "[["() pour accéder au contenu des éléments d’une liste.
Essayer les instructions suivantes et conclure
> L[[2]]

> "[["(L,2)

> class(L[[2]])

> L[[5]][[2]]

Exercice 3 Définissez le vecteur A “ p1, 4, 5q, la matrice M at de taille 3 ˆ 4 composée


uniquement de 1, et la liste l1 composée des deux éléments précédents. Donner des noms
aux éléments de l1 .

Remarque: Que renvoie les instructions suivantes ?


> L[2,3] ?

> L[[2,3]] ?
Commenter.

Remarque: R définit ce que l’on appelle l’indexation récursive. Ainsi, l’instruction sui-
vante commence par récupérer le contenu du deuxième élément de la liste L (c’est-à-dire
le vecteur c(34,67,8)), puis extrait le troisième élément de ce vecteur.
> L[[c(2,3)]]
( Indexation récursive.)
8

3.2 Insertion

Le mécanisme d’insertion fonctionne comme précédemment en utilisant la flèche <-.

4 Le tableau individus ˆ variables


Le tableau individus variables est la structure par excellence en statistique. Cette notion
est exprimée dans R par le data.frame. Conceptuellement, c’est une matrice dont les
lignes correspondent aux individus et les colonnes aux variables (ou caractères) mesurées

Olfa Selmi 6
Probablités et Statistiques LF2Info

sur ces derniers. Chaque colonne représente une variable particulière dont tous les éléments
sont du même type. Les colonnes de la matrice-données peuvent étre nommées.
Exemple
> IMC <- data.frame(Sexe=c("H","F","H","F","H","F"),
+ Taille=c(1.83,1.76,1.82,1.60,1.90,1.66),
+ Poids=c(67,58,66,48,75,55),
+ row.names=c("ind1","ind2","ind3","ind4","ind5","ind6"))
> IMC
> is.data.frame(IMC)
> is.list(IMC)
Remarque:
‚ La fonction str() permet d’afficher la structure de chacune des colonnes d’un data.frame.
‚ Les data.frame peuvent être vus comme des listes de vecteurs de même longueur. Cela
est d’autant plus vrai que c’est de cette façon que R structure dans son fonctionne-
ment interne un data.frame.
Exemple
> var1<-c("a","b","a","fi","jk")
> var2<-c(5,8,9,1,3)
> tab<-data.frame(var1,var2)
> class(tab)
"data.frame"
> is.list(tab)
TRUE
> is.data.frame(tab)
TRUE
> tab

Un tableau conserve le nom des vecteurs, dans notre cas var1 et var2. Il est possible de
donner des noms aux lignes avec l’option row.names qui doit fournir un vecteur de type
caractère et de longueur égale au nombre de lignes du tableau de données.
Exemple
> var1<-c("a","b","a","fi","jk")
> var2<-c(0.25,0.35,0.15,0.25,0.3)
> tab<-data.frame(tabA = var1,tabB = var2,row.names= c("ind1","ind2","ind3","ind4","ind5"))
> tab

Un tableau étant par définition une liste particulière, il est possible d’accèder aux élé-
ments d’un tableau avec les doubles crochets [[]], ou avec le $ en utilisant les noms de
colonnes. La commande attach permet d’utiliser les noms des variables du tableau sans
rappeler le tableau auxquelles elles appartiennent. On utilise la commande detach pour
annuler le attach.
Exemple
> tabB
Erreur : objet ’tabB’ introuvable
> attach(tab)

Olfa Selmi 7
Probablités et Statistiques LF2Info

> tabB
0.25 0.35 0.15 0.25 0.30

4.1 Opérations

Il est souvent très utile de pouvoir combiner (fusionner) plusieurs data.frames. Les fonc-
tions de base permettant d’obtenir ce résultat sont tout comme pour les matrices cbind()
pour la fusion des colonnes et rbind() pour la fusion des lignes.
Toutefois, cette fonction n’est pas optimale, comme on va le voir sur l’exemple suivant.
Essayons de réunir (combiner) en colonnes les deux tables suivantes.

Id SEXE Poids Id SEXE Taille


1 H 75 1 H 182
X1 “ 2 F 68 et X2 “ 2 F 165
3 F 48 3 F 160
4 H 72 4 H 178
> X1 <- data.frame(Id=1 :4,SEXE=c("H","F","F","H"), Poids=c(75,68,48,72))
> X2 <- data.frame(Id=1 :4,SEXE=c("H","F","F","H"),Taille=c(182,165,160,178))
> cbind(X1,X2)
Que remarquez vous ? ?
Utiliser la fonction merge
merge(X1,X2)
Conclure.

5 Les facteurs- Les variables ordinales


La structure factor permet de manipuler les variables catégorielles plus facilement qu’avec
des vecteurs de caractères, notamment grâce à l’utilisation des fonctions factor et levels.
> x <- factor(c("bleu","vert","bleu","rouge", "bleu","vert","vert"))
>x
bleu vert bleu rouge bleu vert vert
Levels : bleu rouge vert
> levels(x)
"bleu" "rouge" "vert"
> class(x)
"factor"

Remarque: Il est bien évidemment possible de mettre des facteurs dans un data.frame.
R indique les différents niveaux (levels) du facteur. La fonction factor() est donc celle à
utiliser pour stocker des variables qualitatives. Pour les variables ordinales, il est plutôt
conseillé d’utiliser la fonction ordered() :

Olfa Selmi 8
Probablités et Statistiques LF2Info

Exemple
Si vous partez d’une variable déjà structurée en factor telle que celle ci :
> fumeur <- as.factor(c("Fumeur","NonFumeur","NonFumeur", "Fumeur","NonFumeur","Fumeur","NonF
"Fumeur","NonFumeur","NonFumeur"))
> fumeur
Fumeur NonFumeur NonFumeur Fumeur NonFumeur
Fumeur NonFumeur Fumeur NonFumeur NonFumeur
Levels : Fumeur NonFumeur

Le paramètre levels de la fonction ordered() permet de spécifier l’ordre des modalités de


la variable.
On reviendra sur ces fonctions en détails en TP3 et TP4

6 Les dates
R permet de structurer les données constituées par des dates, au moyen de la fonction
as.Date().
Exemple
> dates <- c("27/02/92","27/02/92","14/01/92","28/02/92","01/02/92")
> dates <- as.Date(dates, "%d/%m/%y")
> dates
"1992-02-27" "1992-02-27" "1992-01-14" "1992-02-28"
"1992-02-01"
> class(dates)
"Date"
Remarque: Dans R, il existe deux fonctions permettant d’afficher la date courante :
Sys.time() et date().

Exercice 4 Un échantillon de dossiers d’enfants a été saisi. Ce sont des enfants vus lors
d’une visite en première section de maternelle dans une école. L’échantillon présenté ici
est constitué de dix enfants âgés de 3 ou 4 ans.
Les données disponibles pour chaque enfant sont :
— le sexe : F pour fille et M pour garçons ;
— l’âge en annaes et en mois à la date de la visite (deux variables, une pour le nombre
d’années et une pour le nombre de mois) ;
— le poids en kg arrondi à 100 g près ;
— la taille en cm arrondie à 0,5 cm près.
Prénom Sarra Yasmine Ahmed lili Mohamed Haroun Adam Khalil Ali Yassine
Sexe F F M F M M M M M M
Poids 16 14 13.5 15.4 16.5 16 17 14.8 17 16.7
An 3 3 3 4 3 4 3 3 4 3
Mois 5 10 5 0 8 0 11 9 1 3
Taille 100.0 97.0 95.5 101.0 100.0 98.5 103.0 98.0 101.5 100.0

Olfa Selmi 9
Probablités et Statistiques LF2Info

1. Choisissez la fonction R appropriée pour enregistrer les données de chacune des


variables précédentes dans des vecteurs que vous nommerez Individus, Poids, Taille
et Sexe.
2. Calculez la moyenne des variables pour lesquelles cela est possible.
3. Calculez l’IMC des individus et regroupez les valeurs obtenues dans un vecteur
nommé IMC.
Poid(en kg)
IM C “
(T aillepmqq2
4. Regroupez ces variables dans la structure R qui vous paraît la plus adaptée.
5. Utilisez l’aide en ligne de R afin d’obtenir des informations sur la fonction plot().
6. Tracez le nuage de points du Poids en fonction de la Taille. Pensez à fournir un
titre à votre graphique et à annoter vos axes.

7 Récapitulatif (Structure de données- Types de don-


nées
Types des données Type sous R Présentation
réel numeric 3.27
complexe complex 3 ` 2i
logique logical TRUE ou FALSE
manquant logical NA
texte character "texte"
binaires raw 1c

Structure des données Instruction R


vecteur c()
matrice matrix()
tableau multidimentionnel array()
liste list()
tableau individu ˆ variables data.frame
facteur factor()
dates as.Date

Olfa Selmi 10

Вам также может понравиться