Restart 1: Objets de base

Lise Vaudor

01/02/2021

Création d’objets

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

Création de vecteurs

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)
v1
[1]  2.3  3.6  1.1  2.4  2.5 10.2
v2 <- c("Paris","Lyon","Marseille")
v2
[1] "Paris"     "Lyon"      "Marseille"
v3 <- c(TRUE,FALSE,FALSE,TRUE,TRUE)
v3
[1]  TRUE FALSE FALSE  TRUE  TRUE

Les éléments d’un vecteur peuvent être nommés de la façon suivante:

vn <- c(metro=1,boulot=8,dodo=9,autre=6)
vn
 metro boulot   dodo  autre 
     1      8      9      6 

Création de vecteurs: séquences, répétitions

On peut également créer des vecteurs correspondant à:

  • des séquences de valeurs régulièrement espacées
# valeurs de 0 à 10 par pas de 2
v4 <- seq(from=0,to=10,by=2)
v4
[1]  0  2  4  6  8 10
# 5 valeurs regulierement espacees de 2 a 13
v5 <- seq(from=2,to=13,length.out=5)  
v5
[1]  2.00  4.75  7.50 10.25 13.00
# nombres entiers de 0 a 7
v6 <- 0:7
v6
[1] 0 1 2 3 4 5 6 7

ou bien:

  • des séquences de valeurs répétées
# 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 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6
[24] 7

Classes des objets

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

  • numérique
  • caractère
  • logique, c’est à dire que les valeurs qu’ils contiennent sont de type vrai / faux (TRUE / FALSE ou T / F).

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")
class(v2)
[1] "character"
v3 <- c(TRUE,FALSE,FALSE,TRUE,TRUE)
class(v3)
[1] "logical"

Création de vecteurs

Remarquez que l’on peut aussi utiliser c() pour combiner plusieurs vecteurs:

v4
[1]  0  2  4  6  8 10
v5
[1]  2.00  4.75  7.50 10.25 13.00
vglobal<-c(v4,v5)
vglobal
 [1]  0.00  2.00  4.00  6.00  8.00 10.00  2.00
 [8]  4.75  7.50 10.25 13.00

Si l’on tente quelque chose comme

v6
[1] 0 1 2 3 4 5 6 7
v7
[1] "date1" "date1" "date1" "date1" "date1"
vessai=c(v6,v7)
vessai
 [1] "0"     "1"     "2"     "3"     "4"    
 [6] "5"     "6"     "7"     "date1" "date1"
[11] "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).

Valeurs manquantes

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)

Création de facteurs

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",3),rep("date2",3)))
f1
[1] date1 date1 date1 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.

Création de listes

Une liste est un assemblage d’objets qui peuvent être de natures et/ou de tailles différentes. Par exemple, la liste l1

l1=list(sites=c("Paris","Lyon"),
        nb=c(1100,332,52,532,33,66,22,114))
l1
$sites
[1] "Paris" "Lyon" 

$nb
[1] 1100  332   52  532   33   66   22  114

rassemble un vecteur de taille 2 et un vecteur de taille 8 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).

Création d’objets: tableaux de données

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.

Voici comment créer un tableau de données (tibble) sous R, en assemblant plusieurs vecteurs de même taille:

t1 <- tibble(Espece = c("Chien","Dauphin",
                        "Chat","Eponge"),
             Nom = c("Lassie","Flipper",
                     "Garfield","Bob"),
             Date = c(1940,1964,1978,1999))
t1
# A tibble: 4 x 3
  Espece  Nom       Date
  <chr>   <chr>    <dbl>
1 Chien   Lassie    1940
2 Dauphin Flipper   1964
3 Chat    Garfield  1978
4 Eponge  Bob       1999

Remarque: les objets de type data.frame sont comparables aux tibbles, avec quelques différences notamment liées au typage des variables et à l’affichage.

Création d’objets, conversion d’objets

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
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
Levels: 0 1 2 3 4 5 6 7

convertit le vecteur v6 en facteur pour créer v6f.

Indexation

On peut s’intéresser à une partie d’un objet, par exemple un ou plusieurs éléments d’un vecteur ou d’un facteur.

Indexation 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
v1[rep(1:3,5)]
 [1] 2.3 3.6 1.1 2.3 3.6 1.1 2.3 3.6 1.1 2.3 3.6
[12] 1.1 2.3 3.6 1.1

Pour un facteur:

f1
[1] date1 date1 date1 date2 date2 date2
Levels: date1 date2
f1[1:2]
[1] date1 date1
Levels: date1 date2
Remarquez que dans les éléments n° 1 et 2 du facteur f1, il n’y a que la valeur “date1”. Cependant, “date2” fait toujours partie des niveaux possibles de ce facteur!

Indexation d’une liste

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" 

$nb
[1] 1100  332   52  532   33   66   22  114
l1[[1]] #equivalent a l1$sites
[1] "Paris" "Lyon" 
l1$nb   #equivalent a l1[[2]]
[1] 1100  332   52  532   33   66   22  114

Remarquez que l’élément sites de notre liste l1 est un vecteur… Il est donc indexable comme un vecteur! De même pour nb.

l1$sites[2]
[1] "Lyon"
l1$nb[5]
[1] 33

Par ailleurs, l’indexation d’une liste avec de simples crochets [] est également possible… Dans ce cas, on obtient une sous-liste!

l1[1]
$sites
[1] "Paris" "Lyon" 

Indexation d’une tibble

Pour la j\(^{eme}\) variable d’un tableau on utilise des double crochets, ou bien le nom de la variable à laquelle on s’intéresse:

tableau[[j]]
tableau[["variable"]]
tableau$variable

Par exemple, considérons notre tableau t1:

t1
# A tibble: 4 x 3
  Espece  Nom       Date
  <chr>   <chr>    <dbl>
1 Chien   Lassie    1940
2 Dauphin Flipper   1964
3 Chat    Garfield  1978
4 Eponge  Bob       1999
t1[[3]]       # colonne 3 de t1
[1] 1940 1964 1978 1999
t1[["Date"]]  # colonne "Date" de t1
[1] 1940 1964 1978 1999
t1$Date       # colonne "Date" de t1
[1] 1940 1964 1978 1999
t1[3]         # tibble = colonne 3 de t1
# A tibble: 4 x 1
   Date
  <dbl>
1  1940
2  1964
3  1978
4  1999

Indexation d’une tibble

Si l’on s’intéresse à l’élément d’une tibble qui se situe sur la i\(^{eme}\) ligne et sur la j\(^{eme}\) colonne, on y a accès par:

t1[i,j]
t1
# A tibble: 4 x 3
  Espece  Nom       Date
  <chr>   <chr>    <dbl>
1 Chien   Lassie    1940
2 Dauphin Flipper   1964
3 Chat    Garfield  1978
4 Eponge  Bob       1999
t1[1,3] # ligne 1, colonne 3
# A tibble: 1 x 1
   Date
  <dbl>
1  1940
t1[4,]  # ligne 4, toutes colonnes
# A tibble: 1 x 3
  Espece Nom    Date
  <chr>  <chr> <dbl>
1 Eponge Bob    1999
t1[2,1:2] # ligne 2, colonnes 1 et 2
# A tibble: 1 x 2
  Espece  Nom    
  <chr>   <chr>  
1 Dauphin Flipper
t1[2,c("Espece","Date")] # ligne 2, colonnes "Espece" et "Date"
# A tibble: 1 x 2
  Espece   Date
  <chr>   <dbl>
1 Dauphin  1964

On récapitule!

On a parlé de quoi, déjà?
  • types d’objets: vecteurs, facteurs, listes, tableaux de données (tibbles)
  • création des objets (combinaison, répétitions, séquences, valeurs manquantes, etc.)
  • classes des objets (numérique, logique, caractère, etc.)
  • indexation:
    • accès par la position ([i], [i,j], [[i]])
    • accès par le nom ($element, [“element”], [[“element”]])