Partie 1 Premiers pas

  • Mise en place : Télécharger le dossier exo1 et décompressez le sur votre ordinateur. Placez le dossier exo1 comme sous-dossier de votre dossier de cours. Puis ouvrez le programme R exo1.R

1.1 Opérations arithmétiques

Nous allons commencer par passer quelques commandes arithmétiques simples. Il suffit de les taper dans la console de R pour qu’elles s’executent automatiquement.

8+2
#> [1] 10

8-2
#> [1] 6

8*2
#> [1] 16

8/2
#> [1] 4

8**2
#> [1] 64

8**(1/2)
#> [1] 2.828427

log(10)
#> [1] 2.302585

log10(10)
#> [1] 1

sqrt(10)
#> [1] 3.162278

sin(pi)
#> [1] 1.224647e-16

cos(pi)
#> [1] -1

tan(pi)
#> [1] -1.224647e-16

1.2 Les objets de base : valeur, vecteur, matrice

Les objets élémentéires de R apparaissent dans la fenêtre environnement sous la rubrique Values

1.2.1 Eléments

Un élément est unique et constitue la brique de base de tous les objets suivants. On peut aussi l’interpréter comme un vecteur de longueur 1 ou une matrice de dimension 1x1.

x<-8
y<-2

x+y
#> [1] 10
x*y
#> [1] 16
x**y
#> [1] 64

Les éléments se combinent différemment selon leur type. Par exemple, des éléments de type caractère (character) peuvent être assemblés avec l’instruction paste() ou découpez avec l’instruction substr() :

x<-"Bonjour"
y<- "tout le monde"
z<- "!"
paste(x,y,z)
#> [1] "Bonjour tout le monde !"
substr(x,1,3)
#> [1] "Bon"

Quant aux éléments logiques (logical) nous verrons qu’ils peuvent se combiner avec des opérateurs comme & quii signifie ET ou bien | qui signifie OU.

x<-TRUE
y<-FALSE

x & y
#> [1] FALSE
x | y 
#> [1] TRUE

1.2.2 vecteurs (vectors)

Un vecteur est un ensemble d’éléments de même type que l’on a concaténés à l’aide de l’instruction c(). On peut ensuite les aditionner, les multiplier ou les combiner avec des éléments.

x <- c(1,2,4,8,16)
y <- 4
x+y
#> [1]  5  6  8 12 20
x*y
#> [1]  4  8 16 32 64
x**y
#> [1]     1    16   256  4096 65536

On remarque dans l’exemple ci-dessus que R n’a pas de problème pour combiner des vecteurs de tailles différentes.

1.2.3 Matrices (matrix)

Une matrice est un ensemble de vecteurs de même longueur et de même type. On peut donc construire une matrice en concaténant des vecteurs verticalement avec cbind()ou horizontalement avec rbind().


# deux vecteurs
x1 <- c(1,2,4,8,16)
x2 <- c(5,10,15,20,25)

# matrice en colonnes
m1 <- cbind(x1,x2)
m1
#>      x1 x2
#> [1,]  1  5
#> [2,]  2 10
#> [3,]  4 15
#> [4,]  8 20
#> [5,] 16 25

# matrice en lignes
m2 <- rbind(x1,x2)
m2
#>    [,1] [,2] [,3] [,4] [,5]
#> x1    1    2    4    8   16
#> x2    5   10   15   20   25

# piège !
m3 <- c(x1,x2)
m3
#>  [1]  1  2  4  8 16  5 10 15 20 25
is.matrix(m3)
#> [1] FALSE

Si on assemble deux vecteurs à l’aide de la commande c()on obtient un vecteur et pas une matrice.

1.3 Ne pas confondre listes et vecteurs !

R utilise des types plus complexes d’objets qui lui sont propres et qui sont en général des listes ou des listes de listes.

  • liste simple
  • liste de liste
  • listes de vecteur = data.frame

Les vecteurs regroupent des éléments de même type tandis que les listes regroupent des éléments ou des objets de type quelconque. Le type liste est donc beaucoup plus général, mais aussi plus difficile d’emploi.

On peut comparer une liste à un panier de course dans lequel on mélange des choux, des carottes, des navets, une boîte de douze oeufs, un paquet de croquettes pour chiens, etc…

# Format vecteur
prenom <- c("Ali", "Amine",
    "Anne","Marc","Zayneb")
sexe <- c("H","H","F","H","F")
age  <- c(21,22,24,18,25)


# Format liste
Ali <- list("H",21)
Amine <- list("F",22)
Anne <- list("F",28)
Marc <- list ("H",18)
Zayneb <- list("F",25)

# Ne pas confondre !
Ali <- c("H",21)
Ali
#> [1] "H"  "21"
Ali <- list("H",21)
Ali
#> [[1]]
#> [1] "H"
#> 
#> [[2]]
#> [1] 21

1.4 Attention aux types de variables …

Chaque valeur, vecteur ou matrice appartient à un seul type de données. Il est important de ne pas les confondre, sous peine d’obtenir des résultats … douteux. On se limitera ici aux principaux types, d’autres étant vus ultérieurement dans l’année :

  • numeric : type général (entier, réels, …)
  • logique : type booleen (TRUE/FALSE)
  • date : année, mois, jour,n heure, minutes, secondes, …
  • character : texte quelconque
  • factor : variable catégorielle (codage d’enquêtes …)

La commande str() permet de vérifier le type d’un vecteur (ou d’une matrice) et d’en afficher la dimension.

# Format charactère
prenom <- c("Ali", "Amine","Anne",
            "Marc","Zayneb")
str(prenom)
#>  chr [1:5] "Ali" "Amine" "Anne" "Marc" "Zayneb"

# Format logique
likeR <- c(TRUE,FALSE, TRUE,
           FALSE, FALSE)
str(likeR)
#>  logi [1:5] TRUE FALSE TRUE FALSE FALSE
# Format Factor
sexe <- c(1,1,2,1,2)
sexe<-as.factor(sexe)
levels(sexe) <-c("Homme","Femme")
str(sexe)
#>  Factor w/ 2 levels "Homme","Femme": 1 1 2 1 2

# Format numerique
age  <- c(21,22,24,18,25)
str(age)
#>  num [1:5] 21 22 24 18 25

# Format date
nais<-c("1999-10-28","1998-10-13",
 "1996-10-15","2002-02-07","1995-06-18")
nais<-as.Date(nais)
str(nais)
#>  Date[1:5], format: "1999-10-28" "1998-10-13" "1996-10-15" "2002-02-07" "1995-06-18"

1.5 Types de tableaux et guerres de religion.

R est un langage qui a beaucouop évolué au cours du temps, suscitant l’apparition de nouveaux types d’objets mieux adapéts à certaines fonctions. Du coup, il existe plusieurs format de tableaux de données, plus ou moins compatibles entre eux.

On notera que dans la fenêtre environnement, les tableaux apparaissent dans la sous-fenêtre data et non plus dans la sous-fenêtre values comme c’était le cas pour les éléments, vecteurs ou matrices.

1.5.1 Le type data.frame :

C’est le type d’origine correspondant à ce qu’on appelle le langage R-Base. Il se présente en pratique comme une liste de vecteurs qui peuvent être de types différents mais qui sont de même longueur.

# Création d'un data.frame
tab1<-data.frame(prenom,nais,
                age,sexe,likeR)
str(tab1)
#> 'data.frame':    5 obs. of  5 variables:
#>  $ prenom: chr  "Ali" "Amine" "Anne" "Marc" ...
#>  $ nais  : Date, format: "1999-10-28" "1998-10-13" ...
#>  $ age   : num  21 22 24 18 25
#>  $ sexe  : Factor w/ 2 levels "Homme","Femme": 1 1 2 1 2
#>  $ likeR : logi  TRUE FALSE TRUE FALSE FALSE

1.5.2 Le type tibble

c’est un type créé par Hadley Wickham pour développer la suite de fonctions Tidyverse ou ggplot

# Création d'un tibble
library(tidyr, quiet=T)
tab2<-tibble(prenom,nais,
            age,sexe,likeR)
str(tab2)
#> tibble [5 × 5] (S3: tbl_df/tbl/data.frame)
#>  $ prenom: chr [1:5] "Ali" "Amine" "Anne" "Marc" ...
#>  $ nais  : Date[1:5], format: "1999-10-28" "1998-10-13" ...
#>  $ age   : num [1:5] 21 22 24 18 25
#>  $ sexe  : Factor w/ 2 levels "Homme","Femme": 1 1 2 1 2
#>  $ likeR : logi [1:5] TRUE FALSE TRUE FALSE FALSE

1.5.3 Le type data.table

C’est un type récent créé pour traiter les tableaux de très grande taille à l’aide du package … data.table


# Création d'un data.table
library(data.table, quiet=T)
#> 
#> Attaching package: 'data.table'
#> The following objects are masked from 'package:lubridate':
#> 
#>     hour, isoweek, mday, minute, month, quarter, second, wday, week,
#>     yday, year
#> The following objects are masked from 'package:dplyr':
#> 
#>     between, first, last
#> The following object is masked from 'package:purrr':
#> 
#>     transpose
tab3<-data.table(prenom,nais,
                age,sexe,likeR)
str(tab3)
#> Classes 'data.table' and 'data.frame':   5 obs. of  5 variables:
#>  $ prenom: chr  "Ali" "Amine" "Anne" "Marc" ...
#>  $ nais  : Date, format: "1999-10-28" "1998-10-13" ...
#>  $ age   : num  21 22 24 18 25
#>  $ sexe  : Factor w/ 2 levels "Homme","Femme": 1 1 2 1 2
#>  $ likeR : logi  TRUE FALSE TRUE FALSE FALSE
#>  - attr(*, ".internal.selfref")=<externalptr>

1.6 En résumé

R est un langage de programmation multifonction qui évolue depuis maintenant plus de 30 ans et auquel s’ajoutent continuellement de nouveaux packages. A la différence de SPSS, il n’est pas spécialisé uniquement en statistique, même si le coeur du logiciel est bien centré sur la statistique. Pour progresser rapidement en R il est indispensable :

  • de prêter une grande attention aux types de variables et de tableaux.
  • de ne pas chercher à utiliser trop vite de nouveaux packages tant que l’on n’a pas acquis une pratique suffisante du R-Base.
  • de consulter la documentation et les forums de discussion en cas de difficulté.

1.7 Exercices

Exercice 1

Construire le vecteur x suivant :

#> [1] "Paris"    "Londres"  "Tokyo"    "New York"
\iffalse
x <- c("Paris", "Londres","Tokyo","New York")

Construire le vecteur y suivant :

#> [1] "France"      "Royaume-Uni" "Japon"       "USA"
\iffalse
y <- c("France", "Royaume-Uni","Japon","USA")

Construire le vecteur z suivant :

#> [1] 10.2 14.6 42.8 23.9
\iffalse
z <- c(10.2, 14.6,42.8,23.9)

Construire la matrice m1

#>   [,1]     [,2]          [,3]    [,4]      
#> x "Paris"  "Londres"     "Tokyo" "New York"
#> y "France" "Royaume-Uni" "Japon" "USA"
\iffalse
m1<-rbind(x,y)

Construire le data.frame df

#>             y        x    z
#> 1      France    Paris 10.2
#> 2 Royaume-Uni  Londres 14.6
#> 3       Japon    Tokyo 42.8
#> 4         USA New York 23.9
\iffalse
df<-data.frame(y,x,z)

Exercice 2 (d’après J.Barnier)

On a demandé à 4 ménages le revenu des deux conjoints, et le nombre de personnes du ménage :

conjoint1 <- c(1200, 1180, 1750, 2100)
conjoint2 <- c(1450, 1870, 1690, 0)
nb_personnes <- c(4, 2, 3, 2)

Calculer le revenu total de chaque ménage, puis diviser par le nombre de personnes pour obtenir le revenu par personne de chaque ménage.

\iffalse
revenu_total <- conjoint1 + conjoint2
revenu_total / nb_personnes