Académique Documents
Professionnel Documents
Culture Documents
D. B.
18/10/2021
Introduction à R
author: Driss Bari date: 18 octobre 2021 autosize: true
Description sommaire de R
• R est un langage dédié aux statistiques développé à partir des années ’90 à l’University of Auckland,
Nouvelle-Zélande.
• Son implémentation principale est le logiciel open source (gratuit et modifiable) R (www.cran.r-
project.org).
• R est normalement utilisé à partir de l’interface graphique et de développement RStudio
(www.rstudio.com).
• on peut exécuter un script, c’est à dire une suite de commandes qui se trouvent dans un fichier dont
l’extension est .R.
Description sommaire de R
• R est un environnement intégré de manipulation de données, de calcul et de préparation de graphiques
• R un langage de programmation complet et autonome.
• le R est interprété, c’est-à-dire qu’il requiert un autre programme - l’interprète - pour que ses commandes
soient exécutées. Par opposition, les programmes de langages compilés, comme le C ou le C++, sont
d’abord convertis en code machine par le compilateur puis directement exécutés par l’ordinateur.
• Le R est un langage particulièrement puissant pour les applications mathématiques et statistiques (et
donc actuarielles) puisque précisément développé dans ce but.
Caractéristiques intéressantes de R
• R est à la fois un logiciel (au départ de statistique, de data science aujourd’hui, c’est-à-dire couvrant
beaucoup plus de domaines), et un langage de programmation orienté objet ( en gros ça veut dire que
la programmation est simplifiée).
• langage basé sur la notion de vecteur, ce qui simplifie les calculs mathé- matiques et réduit considérable-
ment le recours aux structures itératives;
• pas de typage ni de déclaration obligatoire des variables;
• programmes courts, en général quelques lignes de code seulement;
• temps de développement très court.
1
Caractéristiques intéressantes de R
• La communauté des utilisateurs R est très active dans le monde scientifique (statistiques, science des
données, bioinformatique, sciences sociales,. . . ) et de plus en plus dans les entreprises.
• la richesse de packages développés par les utilisateurs et développeurs qu’on peut installer pour augmenter
ses capacités dans des domaines très variés des statistiques.
• R dispose d’une documentation très complète. On peut accéder à l’aide en tapant ? suivi par la fonction
sur la quelle on souhaite se renseigner
• On peut aussi trouver énormément d’informations sur le web: en cherchant sur Google un problème lié
à une tâche R on trouve presque toujours une réponse
Packages
Pour installer un package :
install.packages("dplyr")
# on telecharge et installe le package dplyr utilisé dans la manipulationd des données
Une fois un package installé, il faudra le charger en mémoire à chaque fois une nouvelle session est ouverte :
library(dplyr) #sans guillemets!
#require(dplyr) #fonction équivalente
Références
Une excellente référence en français est le livre de Vincent Goulet Introduction à la programmation en R,
qu’on peut télécharger gratuitement sur le site du CRAN :
https://cran.r-project.org/doc/contrib/Goulet_introduction_programmation_R.pdf
Une référence complète est l’introduction officielle sur le site du CRAN :
https://cran.r-project.org/doc/manuals/R-intro.html
Affectation
a est une variable, en interne c’est un vecteur de taille 1, et il peut contenir des données numériques → le
typage est donc automatique. Dans la terminologie R, a est un « objet ».
a <- 10.2
b = 20.3
10.5 -> c
print(c(a,b,c))
2
ls()
3
Conventions pour les noms d’objets
• Certains mots sont réservés et il est interdit de les utiliser comme nom d’objet.
break, else, for, function, if, in, next, repeat, return, while, TRUE, FALSE, Inf, NA, NaN, NULL,
[1] "numeric"
noms <- c('Daniel', 'Jehanne', 'Romain')
mode(noms)
[1] "character"
[1] "list"
mode(is.integer(pi))
[1] "logical"
mode(mode)
[1] "function"
4
length(age)
[1] 3
length(noms)
[1] 3
length(ma.liste)
[1] 2
[1] 1
v2 <- c("a", "c", "t", "u", "a", "r", "i", "a", "t")
length(v2)
[1] 9
[1] 9
nchar(v2)
[1] 1 1 1 1 1 1 1 1 1
[1] 0
v <- numeric(10); v
[1] 0 0 0 0 0 0 0 0 0 0
length(v)
[1] 10
5
Objets dans R : Classes
• La classe d’un objet spécifie son comportement et donc sa façon d’interagir avec opérations et fonctions.
• Un exemple important sont les data frame : des liste spéciales dont les éléments ont tous la même
longueur.
• La classe d’un data frame est différente de celle des listes génériques et les data frame ont un système
d’indiçage qui n’existe pas pour les autres listes
class(ma.liste)
[1] "list"
mon.data.frame=data.frame(noms,age)
mode(mon.data.frame)
[1] "list"
class(mon.data.frame)
[1] "data.frame"
[1] 33
# Essayer la commande suivante:
# ma.liste[1,2]
[1] 3
10 - 5 # soustraction
[1] 5
5 * 3 # multiplication
6
[1] 15
15 / 2 # division entre valeurs réelles
[1] 7.5
15.3 / 2.1 # division entre valeurs réelles
[1] 7.285714
2 ^ 3 # puissance
[1] 8
8 %% 4 # modulo
[1] 0
8 %% 3 # modulo
[1] 2
7 %/% 2 # division entière
[1] 3
[1] FALSE
xor(T,F)
[1] TRUE
T && F
[1] FALSE
T || F
[1] TRUE
7
Données, Types et Opérateurs : character
character désigne les chaînes de caractères. Une constante chaîne de caractère doit être délimitée par des
guillemets
ch = "voiture"
affecte la valeur « voiture » à l’objet ch qui devient donc une variable de type chaîne de caractères. Les
fonctions de manipulation sont : paste(..), grep(..), etc.
a=10
paste("il y a ",a," voitures dans la parking",sep="")
[1] 2 4
grepl("a", x) # logical recherche
[1] 2 3 4
[1] Inf
t=is.infinite(a); t
[1] TRUE
b = 1/Inf; b # affecte la valeur 0 à b
[1] 0
[1] NaN
8
b=b+a ; b
[1] NaN
Valeurs particulières : NA
• Donnée manquante NA (Not available), très utile en statistique
a=10+NA; a
[1] NA
b=a+5; b
[1] NA
is.na(b)
[1] TRUE
[1] TRUE
Vecteurs
• En R l’unité de base dans les calculs est le vecteur (un scalaire est considéré comme un vecteur de
longueur un).
• La fonction la plus utilisée pour créer un vecteur est la concaténation :
prix <- c(150, 162, 155, 157); prix
[1] 150
Vecteurs
prix[c(1,3)]
9
Vecteurs
On peut aussi utiliser un vecteur d’indiçage booléen, les éléments extraits sont bien évidement ceux corre-
spondants aux valeurs TRUE. Par exemple pour extraire les prix supérieurs à 156 :
prix > 156 # le vecteur booléen
Vecteurs
Une alternative est donnée par la fonction which() qui rend les indices dont les éléments vérifient une condition
logique :
which(prix>155)
[1] 2 4
prix[which(prix>156)]
Vecteurs
On peut utiliser l’indiçage pour changer un élément :
prix[1] <- 0; prix
NULL
Vecteurs
model.3
155
10
Vecteurs
Dans un vecteur, tous les éléments doivent avoir le même mode :
x <- c(1,2,'a', 'b'); x
[1] "character"
Vecteurs
Pour générer le vecteur des n premiers entiers on utilise la syntaxe 1:n
1:10
[1] 1 2 3 4 5 6 7 8 9 10
2:6
[1] 2 3 4 5 6
Vecteurs
Pour générer des suites plus générales on utilise la fonction seq() :
seq(from=2, to=20, by=2) # ou plus simplement seq(2,20,2)
[1] 2 4 6 8 10 12 14 16 18 20
On peut créer un vecteur d’éléments répétés avec rep() :
rep(1,len=3) # même chôse que rep(1,3)
[1] 1 1 1
Vecteurs
rep(NA,4)
[1] NA NA NA NA
seq_len(10)
[1] 1 2 3 4 5 6 7 8 9 10
Vecteurs
11
[1] -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5
seq_along(x)
[1] 1 2 3 4 5 6 7 8
Vecteurs
[1] 10 20 20 30 30 40 50 60
sort(x, decr = TRUE) # classement en ordre décroissant
[1] 60 50 40 30 30 20 20 10
sort(c("abc", "B", "Aunt", "Jemima")) # chaînes de caractères
Vecteurs
La fonction ‘order’ retourne la position, dans le vecteur donné en argument, du premier élément selon l’ordre
croissant, puis du deuxième, etc.
order(x)
[1] 3 4 7 2 6 8 1 5
x[order(x)]
[1] 10 20 20 30 30 40 50 60
Vecteurs
[1] 40 20 30 60 20 10 30 50
## Seulement les éléments différents d'un vecteur.
unique(x)
[1] 50 30 10 20 60 40
12
Vecteurs
[1] 3
which.max(x)
[1] 5
match(20, x)
[1] 4
Vecteurs
match(c(20, 30), x)
[1] 4 2
60 %in% x
[1] TRUE
70 %in% x
[1] FALSE
Vecteurs
## ARRONDI
(x <- c(-21.2, -pi, -1.5, -0.2, 0, 0.2, 1.7823, 315))
Vecteurs
13
[1] -21 -3 -1 0 0 1 2 315
floor(x) # plus grand entier inférieur
Matrices :
Une matrice est un vecteur avec un attribut dim de longueur deux. Tous les élément d’une matrice ont donc
le même mode. Pour créer une matrice :
x <- matrix(1:4, nrow=2, ncol=2); x
[,1] [,2]
[1,] 1 3
[2,] 2 4
nrow, ncol : nombre de lignes et de colonnes d’une matrice
nrow(x); ncol(x)
[1] 2
[1] 2
Matrices :
rowSums, colSums : sommes par ligne et par colonne, respectivement, des éléments d’une matrice
rowSums(x); colSums(x)
[1] 4 6
[1] 3 7
rowMeans, colMeans : moyennes par ligne et par colonne, respectivement, des éléments d’une matrice
rowMeans(x); colMeans(x )
[1] 2 3
[1] 1.5 3.5
Matrices :
t -> transposée
t(x)
[,1] [,2]
[1,] 1 2
[2,] 3 4
14
det : déterminant
det(x)
[1] -2
Matrices :
solve
- 1) avec un seul argument (une matrice carrée) : inverse d’une matrice ; - 2) avec deux arguments (une
matrice carrée et un vecteur) : solution du système d’équations linéaires Ax = b
solve(x)
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
solve(x, c(1, 2))
[1] 1 0
Matrices :
diag - 1) avec une matrice en argument : diagonale de la matrice ; - 2) avec un vecteur en argument : matrice
diagonale formée avec le vecteur ; - 3) avec un scalaire p en argument : matrice identité p × p
diag(x)
[1] 1 4
diag(c(1,2))
[,1] [,2]
[1,] 1 0
[2,] 0 2
diag(3)
Matrices :
15
[1] 3 5 7
M[,3] # 3e colonne
[1] 6 7
Matrices :
M[2,3]
[1] 7
M[3]
[1] 4
M[,-2] # pour extraire toutes les colonnes sauf la 2e
[,1] [,2]
[1,] 2 6
[2,] 3 7
Matrices :
Pour fusionner verticalement (horizontalement) deux matrices on utilise rbind() (resp. cbind()) :
cbind(M,-M)
v <- c(3,4,1,6)
v + 2
[1] 5 6 3 8
v * 2 # multiplication par une constante
[1] 6 8 2 12
16
Opérations sur vecteurs et matrices numériques
v * v
[1] 9 16 1 36
v/2
[1] 1 1 1 1
v + v^2
[1] 12 20 2 42
v %*% t(v) # v est consideré comme un vecteur-colonne!
t(v) %*% v
[,1]
[1,] 62
v %*% v # v est consideré un vecteur-ligne et un vecteur-colonne
[,1]
[1,] 62
sqrt(M)
17
Opérations sur vecteurs et matrices numériques
N <- M[,-3]
N %*% diag(1,2)
[,1] [,2]
[1,] 2 4
[2,] 3 5
Structures de contrôle : if
if ( condition )
{
instructions
} else {
instructions
}
Structures de contrôle : if
# demander le prix
print("saisir prix ht")
ht <- scan()
# demander le type de produit
print("type de produit : 1 = luxe, 2 = normal")
typprod <- scan()
# tva
if ( typprod == 1)
{ tva <- 0.33
} else { tva <- 0.19
}
# calcul TTC
ttc <- ht * (1 + tva)
# affichage
print(paste("prix ttc = ",as.character(ttc)))
Structures de contrôle : if
On peut simplifier la structure de branchement, surtout quand il s’agit d’effectuer une simple affectation -
renvoyer une valeur selon que la condition est vraie ou pas
tva <- ifelse( typprod == 1, 0.33, 0.19)
18
ifelse(typeprod == 1, ttc <- ht * 1.33, ttc <- ht * 1.19)
calculer
n
X
S= i2
i
n=10
s <- 0
for (i in 1:n)
{
s <- s + i^2
}
print(paste("la somme = ",s))
f (0) = 0
f (1) = 1
f (n) = f (n − 1) + f (n − 2), n ≥ 2
n <- 10
x <- numeric(n) # création du contenant
x[2] <- 1 # x[1] vaut déjà 0
for (i in 3:n) x[i] <- x[i - 1] + x[i - 2]
x
[1] 0 1 1 2 3 5 8 13 21 34
19
Structures de contrôle : while
while (condition)
{
instructions
}
n=10
s <- 0
i <- 1
while ( i <= n)
{
s <- s + i^2
i <- i + 1
}
print(paste("la somme = ",s))
x = 1
repeat {
print(x)
if ( x > 4) break
x <- x + 1
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 13
20
ma.fonction <- function( x, y =10)
{
z=x+y
return(z)
}
ma.fonction(5)
[1] 15
ma.fonction(y = 20, x = 10)
[1] 30
Facteurs
Un facteur est un vecteur utilisé pour contenir une variable qualitative, c’est à dire une variable à valeurs
discrètes. Ses valeurs, ou catégories ou encore modalités, sont appelées les levels en R.
ville <- c('paris', 'lyon', 'lyon', 'paris', 'nantes')
fact.ville <- as.factor(ville); fact.ville
[1] "factor"
Facteurs
Un facteur a le mode numeric : en effet ses éléments sont stockés comme les entiers énumérant les différentes
modalités :
mode(fact.ville)
[1] "numeric"
as.numeric(fact.ville)
[1] 3 1 1 3 2
Data frames
• Un des conteneurs de données le plus utilisé est le data frame, une liste spéciale de classe data.frame
dont tous les éléments ont la même longueur.
• Pour cette raison, un data frame est représenté sous forme d’un tableau à deux dimensions dont les
colonnes sont ses éléments.
• Typiquement, dans un data frame les colonnes représentent les variables et les ligne les observations.
• Contrairement aux matrices, les éléments d’un data frame peuvent avoir des modes différents.
21
Data frames
Data frames
dim(ma.bd)
[1] 4 4
nrow(ma.bd)
[1] 4
ncol(ma.bd)
[1] 4
names(ma.bd)
Data frames
[1] f f h h
Levels: f h
ma.bd[,2]
[1] 19 45 67 53
ma.bd$Age[ma.bd$Fumeur==FALSE]
[1] 45
22
sep=';') # les variables sont separées par des ;
head(d1)
setwd("/home/bari/Bureau/EHTP-GLT1-Analyse-de-donnees/R-Labs")
d2 <- read.table("heart.txt",
header=TRUE,
sep='\t') # les variables sont separées par une tabulation
dim(d2); names(d2)
[1] 270 13
[1] "age" "sexe" "type_douleur" "pression" "cholester"
[6] "sucre" "electro" "taux_max" "angine" "depression"
[11] "pic" "vaisseau" "coeur"
23
Statistique descritptive unidimensionnelle
Variables quantitatives
Pour une variable quantitative, les statistiques de base qu’on peut calculer sont le minimum, le maximum, la
moyenne, la variance et l’écart type, la médiane et les autres quantiles (on rappelle que le quantile d’ordre p
est la valeur q t.q. p est la fraction des valeurs observées inférieures à q).
min(d2$age)
[1] 29
max(d2$age)
[1] 77
range(d2$age)
[1] 29 77
mean(d2$age)
[1] 54.43333
var(d2$age)
[1] 82.97509
sd(d2$age)
[1] 9.109067
median(d2$age)
[1] 55
quantile(d2$age)
99%
71.93
quantile(d2$age, probs = c(0.01, 0.1, 0.9, 0.99))
24
Statistique descritptive unidimensionnelle
summary(d2)
summary(d2$age)
hist(d2$age)
25
Variables qualititatives
Les fonctions summary() et table() appliquées à un facteur (ou à un vecteur de caractères) comptent les
occurrences des différents niveaux.
summary(d2$sexe)
feminin masculin
87 183
table(d2$type_douleur)
A B C D
20 42 79 129
Variables qualititatives
feminin masculin
0.3222222 0.6777778
Variables qualititatives
a b c NA's
2 1 2 1
table(x)
x
a b c
2 1 2
Variables qualititatives
prop.table(table(x)) #les effectifs sont divisés par le nb total des valeurs non-manquantes
x
a b c
0.4 0.2 0.4
prop.table(summary(x)) #les effectifs sont divisés par le nb total des valeurs
26
a b c NA's
0.3333333 0.1666667 0.3333333 0.1666667
Variables qualititatives
Variables qualititatives
pie(summary(d2$type_douleur))
27