Cours 2
V- Les matrices VI- Les listes VI- Les listes
VII- Les tableaux de données
VIII- Compléments
V- 1 Les matrices (matrix)
Ce sont des vecteurs qui possèdent un argument supplémentaire: la dimension (accessible avec dim()). La dimension est un vecteur de longueur 2 définissant le nombre de lignes et de colonnes de la matrice.
Les valeurs d’une matrice sont toutes de même mode (numérique, caractère, logique).
>M=matrix(1:10,2,5);M
~
M=1:10;dim(M)=c(2,5);M [,1] [,2] [,3] [,4] [,5][1,] 1 3 5 7 9 [2,] 2 4 6 8 10
> dim(M) [1] 2 5
V-2 Génération de matrices
Par la fonction matrix()
matrix(data=, nrow= , ncol=, byrow=, dimnames=)
data:
un vecteur (1° argument par défaut)nrow:
nombre de lignes (2° argument par défaut)ncol:
nombre de colonnes (3° argument par défaut)ncol:
nombre de colonnes (3° argument par défaut)byrow:
remplissage par ligne si T, colonne si F (F par défaut)dimnames:
liste de deux vecteurs, nom des lignes et nom des colonnes respectivement (NULL par défaut).V-2 Génération de matrices
> M=matrix(1:10,2,5); N=matrix(1:10,2,5,byrow=T); M;N;
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9 [2,] 2 4 6 8 10
[,1] [,2] [,3] [,4] [,5]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5 [2,] 6 7 8 9 10
>R=matrix(1:10,2,5,dimnames=list(1:2,letters[1:5]));R;
a b c d e 1 1 3 5 7 9 2 2 4 6 8 10
V-2 Génération de matrices
Par l’attribution de valeurs à l’attribut « dim » d’un vecteur
>M=1:10; dim(M)=c(2,5);M [,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9 [2,] 2 4 6 8 10
® Une matrice de longueur < à nrow*ncol est recyclée par R si besoin:
> P=matrix(1:5,2,5); P;
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 2 4 [2,] 2 4 1 3 5
> Q=matrix(1:3,2,5)
Warning message:
data length [3] is not a sub-multiple or multiple of the number of rows [2] in matrix
V-3 Sélection d’éléments d’une matrice
(Dé-)Sélection par indice de position des éléments (i,j)
Ligne ou colonne entière: >M=matrix(1:15,3,5);M [,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15
>M[1,];M[,3];
[1] 1 4 7 10 13 [1] 7 8 9
Plusieurs lignes ou colonnes : >M[c(1,3),]; >M[,-c(2,4)]
[,1] [,2] [,3] [,4] [,5] [,1] [,2] [,3]
[1,] 1 4 7 10 13 [1,] 1 7 13
[2,] 3 6 9 12 15 [2,] 2 8 14
[3,] 3 9 15
Sous-matrices : > M[1,2]; >M[c(1,2),-3]
[1] 4 [,1] [,2] [,3] [,4]
[1,] 1 4 10 13 [2,] 2 5 11 14
V-3 Sélection d’éléments d’une matrice
(Dé-)Sélection par matrices logiques :
M [,1] [,2] [,3] [,4] [,5] >M[M[,1]>1,]
[1,] 1 4 7 10 13 [,1] [,2] [,3] [,4] [,5]
[2,] 2 5 8 11 14 [1,] 2 5 8 11 14
[3,] 3 6 9 12 15 [2,] 3 6 9 12 15
(Dé-)Sélection d’un vecteur par indice linéaire des éléments (donne des vecteurs ) :
>M[3]; > v=1:3;M[v]; >M[-3];
[1] 3 [1] 1 2 3 [1] 1 2 4 5 6 7 8 9 10 11 12 13 14 15
> M[-v]; >M[M>7]
[1] 4 5 6 7 8 9 10 11 12 13 14 15 [1] 8 9 10 11 12 13 14 15
V-4 Opérations sur les matrices
Les opérateurs habituels (+,-,*,/, =, >,<, …) fonctionnent élément par élément
Produit matriciel algébrique: %*%, Transposée : t()
Diagonalisation d’une matrice carrée: eigen() Déterminant d ’une matrice carrée : det()
Inverse d’une matrice, ou résolution d’un système d’équations linéaire : solve()
solve()
® M+v, M matrice, v vecteur de même longueur que M, est recyclé en matrice.
>M=matrix(c(1,2,1,0),2,2);v=c(1,0,2,1);
>M >v >M+v
[1,] 1 1 [1] 1 0 2 1 [,1] [,2]
[2,] 2 0 [1,] 2 3
[2,] 2 1
V-4 Opérations sur les matrices
>N=matrix(1:4,2,2); >M=matrix(c(1,2,1,0),2,2);
[,1] [,2] [,1] [,2]
[1,] 1 3 [1,] 1 1
[2,] 2 4 [2,] 2 0
>M+2; >M*N; >M%*%N
[,1] [,2] [,1] [,2] [,1] [,2]
[1,] 3 3 [1,] 1 3 [1,] 3 7
[2,] 4 2 [2,] 4 0 [2,] 2 6
>t(M)
[,1] [,2]
[1,] 1 2 [2,] 1 0
V-4 Opérations sur les matrices
D’autres fonctions matricielles utiles :
diag(): si v est un vecteur, diag(v) crée une matrice diagonale avec v sur la diagonale; si M est une matrice, diag(M) extrait la diagonale de M
>v=1:2;diag(v) >M=matrix(1:2,2,2);diag(M)
[,1] [,2] [1] 1 2
[1,] 1 0 [2,] 0 2
sum(): calcule la somme de tous les éléments de M; sum(M, na.rm=T):
somme sans tenir compte des NA >sum(M) [1] 6
rbind(), cbind():concaténation verticale ou horizontale de deux matrices > cbind(M,c(1,1)) > rbind(M,c(1,1))
[,1] [,2] [,3] [,1] [,2]
[1,] 1 1 1 [1,] 1 1
[2,] 2 2 1 [2,] 2 2
[3,] 1 1
V-4 Opérations sur les matrices
apply(M,margin,fun,…): applique à M la fonction fun (ou un opérateur, mais qui doit alors être mis entre guillemets); margin indique si l’action doit être appliquée sur les lignes ( margin=1), les colonnes ( margin=2), ou les deux ( margin=c(1,2))
>M=matrix(c(1,2,1,0),2,2) [,1] [,2]
[,1] [,2]
[1,] 1 1 [2,] 2 0
>apply(M,1,sum) #le résultat est un vecteur formé
[1] 2 2 # des sommes des lignes de la matrice
Fonctions is.numeric(),…
VI- 1 Les listes (list)
Une liste est une collection ordonnée d’objets (vecteurs, matrices, facteurs, data.frames, listes) en ligne, non
nécessairement de même type, mode, longueur.
>list(x=1:5,y=letters[1:5], a=c(T,F))
$x
[1] 1 2 3 4 5
$y
[1] "a" "b" "c" "d" "e"
$a
[1] TRUE FALSE
VI- 1 Génération des listes (list)
La création d’une liste se fait avec la fonction list()
li=list(nom1=, nom2=..) les noms sont facultatifs
Listes nommées :
>L=list(x=1:5,y=letters[1:8]);L$x
[1] 1 2 3 4 5 [1] 1 2 3 4 5
$y
[1] "a" "b" "c" "d" "e" "f" "g" "h"
Listes non nommées:
>x=1:5; y=letters[1:8]; l=list(x,y);l;#ou> l=list(1:5,letters[1:8])
[[1]]
[1] 1 2 3 4 5 [[2]]
[1] "a" "b" "c" "d" "e" "f" "g" "h"
VI-2 Sélection d’éléments dans une liste
Les objets d’une liste sont accessibles (ils ont le type de l’objet)
Par leur nom : li$nom1, li$nom2, si elle est nommée
>L$x >is.vector(L$x)
[1] 1 2 3 4 5 [1] TRUE
par leur index entre double crochet, quelle que soit la liste
>L[[1]]
≠≠≠≠
L[1], #sous liste[1] 1 2 3 4 5 [1] 1 2 3 4 5
On ne peut sélectionner qu’un objet à la fois dans une liste
Sélection de sous-listes (type liste):
>L[1]; > L[c(1,2)]
$x $x
[1] 1 2 3 4 5 [1] 1 2 3 4 5
$y
[1] "a" "b" "c" "d" "e" "f" "g" "h"
VII- 1 Les tableaux de données (data.frame)
En interne ce sont des listes (is.list()=T), dont les champs (colonnes des objets) sont des colonnes de même longueur
En apparence ce sont des matrices dont les colonnes peuvent être de modes différents: caractère,
numérique, logique, …
x y fac 1 1 1 C 2 1 2 C 3 1 3 A 4 1 4 B 5 1 5 A
numérique, logique, …
>L= LETTERS[1:3];
>D=data.frame(x=rep(1,10),y=1:10,fac=sample(L,10,repl=T));
>D
5 1 5 A 6 1 6 A 7 1 7 B 8 1 8 A 9 1 9 B 10 1 10 B
VII-2 Sélection d’éléments dans un data.frame
On peut accéder aux lignes, colonnes et éléments par leur indice de position ou par leur nom (existe par défaut):
>D[,3] #ou >D[,”fac”] ou >D$fac [1] C C A B A A B A B B
Levels: A B C
>D[1,3] #ou >D[1, “fac”]
[1] C [1] C
Levels: A B C
Un élément d’un data.frame est un facteur
>is.factor(D[,3])
[1] TRUE x y fac 1 1 1 C
2 1 2 C 3 1 3 A
4 1 4 B ...
VII-3 Fonctions utiles pour les data.frames (et pour les matrices)
names(),colnames(): renvoie la liste des noms de colonnes ou les crée
>colnames(D); [1] "x" "y" "fac "
>colnames(D)=c(LETTERS[1:2], "fac");D
rownames() renvoie la liste des noms de lignes ou les crée :
>rownames(D)=letters[1:10];D
dimnames():renvoie une liste à 2 champs: noms des lignes/noms des colonne >dimnames(D)
A B fac salle a 1 1 B 1 b 1 2 A 2 c 1 3 B 1 d 1 4 A 2 e 1 5 C 1
….. lignes/noms des colonne >dimnames(D) [[1]]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i " " j "
[[2]]
[1] "A" "B" "fac"
dim():liste des dimensions du data.frame : > dim(D) [1] 10 3 cbind()/rbind():concaténation en colonne/ligne
>cbind(D,salle=rep(c(1,2),5))
edit(), fix() : ouvre fenêtre d’édition où entrer directement les valeurs du data.frame
…..
VII-4 Lire les data.frame de R
Lister des data.frames archivés dans R:
data() : liste tous les data.frame du package de tableaux par défaut de R nommé « datasets » (R-HOME/library/datasets) try(data(package = "cluster") ): liste les data.frame dans le
package "cluster " de R.
Charger des data.frames archivés dans R:
data(USArrests) : charge le data.frame USArrests (dans le package " datasets ");
help(USArrests) : donne des informations sur le data.frame
" USArrests "
library(cluster); data(agriculture)/data(agriculture,
package="cluster") : charge le data.frame " agriculture " du
package " cluster "
VIII- 1 Modes
type Modes possibles Plusieurs
modes
Vecteur vector Numérique,caractère,complexe logique Non
Facteur factor Numérique,caractère Non
Tableau array Numérique,caractère,complexe, logique Non
Matrice matrix Numérique,caractère,complexe, logique Non
Data.frame Numérique,caractère,complexe, logique Oui
Série temporelle ts Numérique,caractère,complexe, logique oui
Liste list Numérique, caractère, complexe logique
oui
VIII-2 Conversion, identification
• as.vector(), is.vector()
• as.factor(), is.factor()
• as.list(), is.list()
• as.matrix(), is.matrix()
• as.matrix(), is.matrix()
• as.data.frame(), is.data.frame()
VIII-3 Fonctions utiles
sum(x) Somme des éléments de x prod(x) Produit des éléments de x
max(x), min(x) Maximum, minimum des éléments de x
which.max(x) Retourne l’indice du maximum des éléments de x which.min(x) Retourne l’indice du minimum des éléments de x range(x) Idem que c(min,max)
mean(x) Moyenne des éléments de x median(x) Médiane des éléments de x
var(x) ou cov(x) Variance des éléments de x(calculée sur n-1) matrice des var et cov si x est une matrice
cor(x) Matrice de corrélation si x est une matrice ou un data frame
sd(x) Ecart-type des éléments de x
VIII-3 Fonctions …
round(x,n) Arrondit les éléments de x à n
chiffres après la virgule
rev(x) Inverse l’ordre des éléments de x
sort(x) Trie les éléments de x dans l’ordre
ascendant
rank(x) Range les éléments de x
scale(x) Centre et réduit les données
scale(x) Centre et réduit les données
pmin(x,y,…) Un vecteur dont le iéme élément est
le minimum entre x[i] et y[i]
cumsum(x) Un vecteur dont le ieme élément est
la somme de x[1]à x[i]
cumprod(), cummin(),cummax() Idem pour produit, minimum, maximum
match(x,y) Retourne un vecteur de meme longueur
que x contenant les éléments de x qui sont dans y
VIII-3 Autres…
choose(n,k) Coefficient binomial Cnk
na.omit() Supprime les observations avec
données manquantes
na.fail() Retourne un message d’erreur si x
contient au moins un NA
unique() Si x est un vecteur ou un data
frame, retourne un objet similaire frame, retourne un objet similaire mais avec les éléments dupliqués supprimés
table() Retourne un tableau des effectifs
des différentes valeurs de x
subset() Retourne une selection de x en
fonction de critères
sample(x,size) Ré-échantillonnage aléatoire et sans remise de size éléments dans x