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.
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.
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.
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 lesforums de discussion
en cas de difficulté.
1.7 Exercices
Exercice 1
Construire le vecteur x
suivant :
#> [1] "Paris" "Londres" "Tokyo" "New York"
\iffalse
Construire le vecteur y
suivant :
#> [1] "France" "Royaume-Uni" "Japon" "USA"
\iffalse
Construire le vecteur z
suivant :
#> [1] 10.2 14.6 42.8 23.9
\iffalse
Construire la matrice m1
#> [,1] [,2] [,3] [,4]
#> x "Paris" "Londres" "Tokyo" "New York"
#> y "France" "Royaume-Uni" "Japon" "USA"
\iffalse
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
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