Lise Vaudor
21 mars 2017
Nous avons vu dans la section précédente comment créer des objets très simples et comment les assigner à un environnement.
Il y a en fait une multitude de types d’objets possibles dans R. Ici nous allons aborder
On appelle vecteur toute séquence d’éléments de même type, par exemple:
v1=
2.3 3.6 1.1 2.4 2.5 10.2 5.1 2.0
v2=
"Paris" "Lyon" "Marseille" "Rennes" "Montpellier"
ou v3=
TRUE FALSE FALSE TRUE TRUE
En R, ces vecteurs s’écrivent:
v1 <- c(2.3,3.6,1.1,2.4,2.5,10.2,5.1,2.0)
v1
## [1] 2.3 3.6 1.1 2.4 2.5 10.2 5.1 2.0
v2 <- c("Paris","Lyon","Marseille","Rennes","Montpellier")
v2
## [1] "Paris" "Lyon" "Marseille" "Rennes" "Montpellier"
v3 <- c(TRUE,FALSE,FALSE,TRUE,TRUE)
v3
## [1] TRUE FALSE FALSE TRUE TRUE
On peut également créer des vecteurs correspondant à:
# valeurs de 0 à 10 par pas de 2
v4 <- seq(from=0,to=10,by=2)
v4
## [1] 0 2 4 6 8 10
# 20 valeurs regulierement espacees de 2 a 13
v5 <- seq(from=2,to=13,length.out=20)
v5
## [1] 2.000000 2.578947 3.157895 3.736842 4.315789 4.894737 5.473684
## [8] 6.052632 6.631579 7.210526 7.789474 8.368421 8.947368 9.526316
## [15] 10.105263 10.684211 11.263158 11.842105 12.421053 13.000000
# nombres entiers de 0 a 10
v6 <- 0:10
v6
## [1] 0 1 2 3 4 5 6 7 8 9 10
# repetition de "date1" 5 fois
v7<-rep("date1",5)
v7
## [1] "date1" "date1" "date1" "date1" "date1"
# repetition du vecteur v6 3 fois
v8<-rep(v6,3)
v8
## [1] 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 0
## [24] 1 2 3 4 5 6 7 8 9 10
Les vecteurs peuvent être de classes différentes selon le type de valeurs qu’ils contiennent (par contre toutes les valeurs d’un vecteur sont supposées être d’un même type).
Ils peuvent par exemple être de mode
Par exemple, pour v1, v2, et v3:
v1 <- c(2.3,3.6,1.1,2.4,2.5,10.2,5.1,2.0)
class(v1)
## [1] "numeric"
v2 <- c("Paris","Lyon","Marseille","Rennes","Montpellier")
class(v2)
## [1] "character"
v3 <- c(TRUE,FALSE,FALSE,TRUE,TRUE)
class(v3)
## [1] "logical"
Remarquez que l’on peut aussi utiliser c()
pour combiner plusieurs vecteurs:
v4
## [1] 0 2 4 6 8 10
v5
## [1] 2.000000 2.578947 3.157895 3.736842 4.315789 4.894737 5.473684
## [8] 6.052632 6.631579 7.210526 7.789474 8.368421 8.947368 9.526316
## [15] 10.105263 10.684211 11.263158 11.842105 12.421053 13.000000
vglobal<-c(v4,v5)
vglobal
## [1] 0.000000 2.000000 4.000000 6.000000 8.000000 10.000000 2.000000
## [8] 2.578947 3.157895 3.736842 4.315789 4.894737 5.473684 6.052632
## [15] 6.631579 7.210526 7.789474 8.368421 8.947368 9.526316 10.105263
## [22] 10.684211 11.263158 11.842105 12.421053 13.000000
Si l’on tente quelque chose comme
v6
## [1] 0 1 2 3 4 5 6 7 8 9 10
v7
## [1] "date1" "date1" "date1" "date1" "date1"
vessai=c(v6,v7)
vessai
## [1] "0" "1" "2" "3" "4" "5" "6" "7"
## [9] "8" "9" "10" "date1" "date1" "date1" "date1" "date1"
R ne renvoie pas de message d’erreur, mais fait en sorte que toutes les valeurs de vessai soient d’un même type (des chaînes de caractère ici: voyez les guillemets autour des valeurs de v7).
Il peut arriver que certaines valeurs d’un objet soient non renseignées. En R, ces valeurs s’écrivent NA
(pour not available).
Par exemple:
v9 <- c(3.2, NA, 8.9, 42.3, 59.2, NA)
Les facteurs ressemblent généralement à des vecteurs de mode caractère, à la nuance près qu’ils comprennent généralement plusieurs niveaux, comme par exemple
f1=factor(c(rep("date1",5),rep("date2",5)))
f1
## [1] date1 date1 date1 date1 date1 date2 date2 date2 date2 date2
## Levels: date1 date2
levels(f1)
## [1] "date1" "date2"
La nuance entre vecteurs et facteurs est importante pour un certain nombre de fonctions implémentées dans R, il est donc assez souvent nécessaire de convertir les vecteurs en facteurs et inversement.
On appelle “matrice” toute grille de valeurs (à 2 dimensions) , par exemple :
M1=
1 3 7
2 8 0
En R, cette matrice peut être créée de la manière suivante:
M1 <- matrix(c(1,2,3,8,7,0),nrow=2,ncol=3)
M1
## [,1] [,2] [,3]
## [1,] 1 3 7
## [2,] 2 8 0
On peut également considérer qu’une matrice résulte de l’accolement de plusieurs vecteurs, en ligne ou en colonnes. Par exemple on peut écrire M1 des deux manières suivantes:
M1<-cbind(c(1,2),c(3,8),c(7,0))
M1<-rbind(c(1,3,7),c(2,8,0))
Une liste est un assemblage d’objets de natures et/ou de tailles différentes. Par exemple, la liste l1
l1=list(sites=v2, nb=M1)
l1
## $sites
## [1] "Paris" "Lyon" "Marseille" "Rennes" "Montpellier"
##
## $nb
## [,1] [,2] [,3]
## [1,] 1 3 7
## [2,] 2 8 0
rassemble un vecteur (v2) et une matrice (M1) au sein d’un même objet.
En pratique, de nombreuses fonctions de R renvoient un objet de type liste (par exemple, un objet “régression linéaire”, renvoyé par la fonction lm, comprend entre autres choses un vecteur de coefficients de la régression et un vecteur de résidus de la régression (donc deux vecteurs de tailles différentes).
Comme une matrice, un tableau de données compte plusieurs lignes et colonnes. En revanche, les colonnes (ou variables) d’un tableau de données peuvent être de types différents, et sont nommées.
Espece | Nom | Date |
---|---|---|
Chien | Lassie | 1940 |
Dauphin | Flipper | 1964 |
Chat | Garfield | 1978 |
Eponge | Bob | 1999 |
Voici comment créer un tableau de données (data.frame) sous R, en assemblant plusieurs vecteurs de même taille:
Espece <- c("Chien","Dauphin","Chat","Eponge")
Nom <- c("Lassie","Flipper","Garfield","Bob")
Date <- c(1940,1964,1978,1999)
t1 <- data.frame(Espece,Nom,Date)
t1
## Espece Nom Date
## 1 Chien Lassie 1940
## 2 Dauphin Flipper 1964
## 3 Chat Garfield 1978
## 4 Eponge Bob 1999
Pour interroger R quant au type (vecteur, facteur, tableau, matrice, etc.) ou au mode (numérique, caractère, logique, etc.) d’un objet, on utilise les fonctions de type is.____.
Par exemple:
v6
## [1] 0 1 2 3 4 5 6 7 8 9 10
is.factor(v6)
## [1] FALSE
is.numeric(v6)
## [1] TRUE
On peut convertir un objet d’un type ou mode à un autre en utilisant les fonctions de type as.____. Par exemple,
v6f <- as.factor(v6)
v6f
## [1] 0 1 2 3 4 5 6 7 8 9 10
## Levels: 0 1 2 3 4 5 6 7 8 9 10
convertit le vecteur v6 en facteur pour créer v6f.
On peut s’intéresser à une partie d’un objet, par exemple un ou plusieurs éléments d’un vecteur ou d’un facteur.
On a accès au i\(^{eme}\) élément d’un vecteur/facteur par la commande:
v[i]
Par exemple:
v1
## [1] 2.3 3.6 1.1 2.4 2.5 10.2 5.1 2.0
v1[4]
## [1] 2.4
v1[1:3] # les trois premieres valeurs
## [1] 2.3 3.6 1.1
v1[c(2,5,6)]
## [1] 3.6 2.5 10.2
Pour un facteur:
f1
## [1] date1 date1 date1 date1 date1 date2 date2 date2 date2 date2
## Levels: date1 date2
f1[3:4]
## [1] date1 date1
## Levels: date1 date2
Remarquez que dans les éléments n° 3 et 4 du facteur f1
, il n’y a que la valeur “date1”. Cependant, “date2” fait toujours partie des niveaux possibles de ce facteur!
Si l’on s’intéresse à l’élément d’une matrice ou d’un tableau de données qui se situe sur la i\(^{eme}\) ligne et sur la j\(^{eme}\) colonne, on y a accès par:
M[i,j]
M1
## [,1] [,2] [,3]
## [1,] 1 3 7
## [2,] 2 8 0
M1[1,3] # la valeur sur la ligne 1 et la colonne 3
## [1] 7
M1[,3] # toutes les valeurs sur la colonne 3
## [1] 7 0
M1[2,1:2] # les deux premieres valeurs de la ligne 2
## [1] 2 8
Pour le i\(^{eme}\) élément d’une liste on utilise des double crochets, ou bien le nom de l’élément auquel on s’intéresse:
liste[[i]]
liste[["element"]]
liste$element
Par exemple, considérons notre liste l1
:
l1
## $sites
## [1] "Paris" "Lyon" "Marseille" "Rennes" "Montpellier"
##
## $nb
## [,1] [,2] [,3]
## [1,] 1 3 7
## [2,] 2 8 0
l1[[1]] #equivalent a l1$sites
## [1] "Paris" "Lyon" "Marseille" "Rennes" "Montpellier"
l1$nb #equivalent a l1[[2]]
## [,1] [,2] [,3]
## [1,] 1 3 7
## [2,] 2 8 0
Remarquez que l’élément sites
de notre liste l1
est un vecteur… Il est donc indexable comme un vecteur! De même, l’élément nb
est une matrice et l’on retrouve pour lui le système d’indexation d’une matrice
l1$sites[2]
## [1] "Lyon"
l1$nb[1,3]
## [1] 7
Pour la i\(^{eme}\) variable d’un tableau on utilise des double crochets, ou bien le nom de la variable à laquelle on s’intéresse:
tableau[[i]]
tableau[["variable"]]
tableau$variable
Par exemple, considérons notre tableau t1
:
t1
## Espece Nom Date
## 1 Chien Lassie 1940
## 2 Dauphin Flipper 1964
## 3 Chat Garfield 1978
## 4 Eponge Bob 1999
t1[[1]] #equivalent a t1$Nom
## [1] "Chien" "Dauphin" "Chat" "Eponge"
t1$Nom #equivalent a t1[[2]]
## [1] "Lassie" "Flipper" "Garfield" "Bob"