Learning R Programming Language With WikiBook (PDF) (FR)
Learning R Programming Language With WikiBook (PDF) (FR)
Learning R Programming Language With WikiBook (PDF) (FR)
https://fr.wikibooks.org/wiki/Programmer_en_R 1/2
28/11/2021 00:43 Programmer en R — Wikilivres
Bibliographie
Emil Hvitfeldt and Julia Silge, Supervised Machine Learning for Text Analysis in R, 2020,
https://smltar.com/
Voir aussi
Découvrir Scilab
Introduction au logiciel Maxima
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R&oldid=650597 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R 2/2
28/11/2021 00:44 Programmer en R/Faire ses premiers pas — Wikilivres
> 1+1
[1] 2
> 2*3
[1] 6
> 2/3
[1] 0.6666667
> 2^3
[1] 8
Manipuler du texte
Pour différencier les chaînes de caractères (ie le texte) des nombres, il suffit d'utiliser les
guillemets.
> x <- 5
> print(x)
[1] 5
> x + 1
[1] 6
https://fr.wikibooks.org/wiki/Programmer_en_R/Faire_ses_premiers_pas 1/5
28/11/2021 00:44 Programmer en R/Faire ses premiers pas — Wikilivres
Vecteurs
Un vecteur est une suite de valeur de même type. Par exemple, on peut avoir un vecteur de
nombres ou un vecteur de chaînes de caractères.
> prix
> fruit
> fruit[1]
[1] "pomme"
> fruit[1:2]
> fruit[1:3]
> fruit[c(1,3)]
Matrices
Une matrice est formée à partir d'un vecteur, en précisant le nombre de lignes et/ou de colonnes.
Par exemple :
> print(A)
[1,] 1 3 5
[2,] 2 4 6
> print(B)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
https://fr.wikibooks.org/wiki/Programmer_en_R/Faire_ses_premiers_pas 2/5
28/11/2021 00:44 Programmer en R/Faire ses premiers pas — Wikilivres
[1,] 1 3 5
[2,] 2 4 6
[,1] [,2]
[1,] 22 49
[2,] 28 64
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
[1,] 1 9 25
[2,] 4 16 36
Tableaux de données
Souvent en statistiques, on manipule des données sous forme de tableaux. En R, les tableaux de
données sont appelés data.frame.
+ )
>
> table_fruits
fruit prix
1 pomme 1.9
2 poire 3.5
3 fraise 14.9
> table_fruits[,"prix"]
> table_fruits[,2]
https://fr.wikibooks.org/wiki/Programmer_en_R/Faire_ses_premiers_pas 3/5
28/11/2021 00:44 Programmer en R/Faire ses premiers pas — Wikilivres
> table_fruits$prix
table_fruits[2,]
> table_fruits[2,]
fruit prix
2 poire 3.5
Pour en savoir plus, sur la manière dont on manipule un tableau de données, on peut lire la section
Manipuler un tableau de données.
Obtenir de l'aide
On peut obtenir de l'aide sur une fonction avec la commande help("")
> help("abs")
> help("^")
> ?abs
> ?"^"
Le point d'interrogation recherche dans toutes les librairies importées. Pour chercher dans toutes
les librairies installées sur le système, on utilise ??
>??select
install.packages("dplyr")
library("dplyr")
L'opérateur tube
https://fr.wikibooks.org/wiki/Programmer_en_R/Faire_ses_premiers_pas 4/5
28/11/2021 00:44 Programmer en R/Faire ses premiers pas — Wikilivres
Traditionnellement, les arguments d'une fonction sont mis entre parenthèse après le nom de la
fonction et on peut composer les fonctions en imbriquant des fonctions dans des fonctions. Par
exemple :
> exp(5)
[1] 148.4132
> log(exp(5))
[1] 5
Lorsqu'on enchaîne de nombreuses fonctions, cette syntaxe peut poser des problèmes de lisibilité
du code. L'opérateur tube %>% (ou pipe) a été introduit par le développeur Stefan Milton Bache
dans la librairie magrittr. Cet opérateur est importé par défaut dans de nombreuses librairies
comme dplyr et permet de rendre le code plus lisible. Cet opérateur est très pratique lorsqu'on
enchaîne plusieurs fonctions à la suite [1] .
[1] 148.4132
[1] 5
Notes et références
1. http://r4ds.had.co.nz/pipes.html
Voir aussi
anglais : R for cats (http://rforcats.net/) écrit par Scott Chamberlain
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Faire_ses_premiers_pas&oldid=636955 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Faire_ses_premiers_pas 5/5
28/11/2021 00:44 Programmer en R/Installer R — Wikilivres
Sous Linux
R fait partie des distributions Debian et Ubuntu. Pour l'installer, il suffit d'utiliser la commande
apt-get :
Sous Windows
Pour installer R sous Windows, il suffit de télécharger le programme d'installation sur le site du
projet R [1] .
Notes et références
1. https://cran.r-project.org/bin/windows/base/
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R/Installer_R&oldid=636978 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Installer_R 1/1
28/11/2021 00:45 Programmer en R/Choisir son environnement de travail — Wikilivres
Terminal
On peut lancer R dans un terminal et travailler directement en ligne de commande.
Radian
Radian permet d'avoir une interface améliorée dans le terminal. Le projet s'inspire de iPython [1] .
RStudio
RStudio est l'environnement de travail le plus couramment utilisé pour travailler avec R. RStudio
peut-être installé sur l'ordinateur local ou sur un serveur.
https://fr.wikibooks.org/wiki/Programmer_en_R/Choisir_son_environnement_de_travail 1/3
28/11/2021 00:45 Programmer en R/Choisir son environnement de travail — Wikilivres
Jupyter Notebook
Jupyter Notebook est une interface utilisateur très couramment employée pour travailler avec
Python et Julia. Il est possible d'installer un noyau pour travailler avec R dans Jupyter Notebook.
Comme RStudio, Jupyter Notebook peut être installé localement ou sur un serveur.
Installation
Après avoir installé Jupyter, il faut installer le noyau R [3] depuis un terminal R ouvert :
devtools::install_github('IRkernel/IRkernel')
Notes et références
1. https://github.com/randy3k/radian
2. http://jupyter.readthedocs.io/en/latest/install.html
https://fr.wikibooks.org/wiki/Programmer_en_R/Choisir_son_environnement_de_travail 2/3
28/11/2021 00:45 Programmer en R/Choisir son environnement de travail — Wikilivres
3. https://github.com/IRkernel/IRkernel
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Choisir_son_environnement_de_travail&oldid=663032 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes peuvent
s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Choisir_son_environnement_de_travail 3/3
28/11/2021 00:45 Programmer en R/Installer des librairies — Wikilivres
install.packages("devtools")
library("devtools")
install_github("dgrtwo/broom")
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R/Installer_des_librairies&oldid=636976 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Installer_des_librairies 1/1
28/11/2021 00:45 Programmer en R/Se documenter — Wikilivres
Aide
Le site RDocumentation.org permet de chercher facilement dans l'aide de toutes les librairies R
disponibles sur le CRAN et sur Github. Ce site permet souvent de trouver une fonction qui
correspond à ce qu'on cherche [1] .
Forums
Pour toutes les questions autour de la programmation R, le forum StackOverflow est très riche [2] .
Twitter
Il existe une importante communauté qui twitte autour de R avec le hashtag #rstats.
Ouvrages
L'ouvrage collectif Introduction à l'analyse de données avec R et RStudio, rédigé par des
démographes et des sociologues français, constitue une très bonne référence pour des utilisateurs
débutants avec un profil de sciences sociales [3] .
L'ouvrages de Garret Grolemund et Hadley Wickham R for Data Science constitue une bonne
référence pour un utilisateur de niveau intermédiaire [4] .
Blogosphère
Il existe une importante blogosphère francophone autour de R. Parmi eux, Arthur Charpentier
publie régulièrement des articles contenant du code R avec des applications en finances et en
assurance [5] , Baptiste Coulmont publie des articles avec des applications en sociologie [6] et
Christian Robert publie des articles autour des statistiques bayésiennes [7] .
Voir aussi
(anglais) R-project (http://www.r-project.org/), le site officiel de R
An Introduction to R (http://cran.r-project.org/doc/manuals/r-release/R-intro.html)
R Language Definition (http://cran.r-project.org/doc/manuals/r-release/R-lang.html)
(anglais) R Wiki (http://rwiki.sciviews.org/)
(anglais) R-bloggers - agrégateur de blogs dédiés à R (http://www.r-bloggers.com/)
Groupe ElementR : analyse spatiale et cartographie avec R (https://elementr.hypotheses.or
g/)
Notes et références
1. https://www.rdocumentation.org/
2. http://stackoverflow.com/questions/tagged/r
https://fr.wikibooks.org/wiki/Programmer_en_R/Se_documenter 1/2
28/11/2021 00:45 Programmer en R/Se documenter — Wikilivres
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R/Se_documenter&oldid=636975 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Se_documenter 2/2
28/11/2021 00:46 Programmer en R/Manipuler les nombres — Wikilivres
les entiers,
les nombres à virgule flottante.
Les deux types sont manipulés à travers les ensembles : vecteurs, matrices, ...
Vecteur de nombres
Un vecteur de nombre est déclaré en appelant la fonction c (Concatenate) qui crée un vecteur par
concaténation d'éléments de même type.
Exemple :
> a = c(12,7,5.3,9.1,24)
> a
> typeof(a)
[1] "double"
Pour spécifier des entiers, il faut suffixer les nombres par la lettre L pour Long :
> a = c(12L,7L,5L.3L,9L,24L)
> a
[1] 12 7 5 9 24
> typeof(a)
[1] "integer"
Séquence de nombres
Dans le cas d'une séquence continue d'entiers compris entre deux bornes, une autre manière de
générer un vecteur les contenant est d’utiliser l'opérateur deux-points : placés entre les bornes :
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
La fonction seq permet de générer une séquence de nombres avec un pas différent, soit spécifié
explicitement, soit en spécifiant le nombre total de nombres dans la séquence.
Exemple :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_nombres 1/3
28/11/2021 00:46 Programmer en R/Manipuler les nombres — Wikilivres
[1] 1 3 5 7 9 11 13 15 17 19 21
[1] 0.0 1.5 3.0 4.5 6.0 7.5 9.0 10.5 12.0 13.5 15.0 16.5 18.0 19.5
21.0
[1] 1 2 3 4 1 2 3 4
[1] 1 1 2 2 3 3 4 4
Conversion
La conversion en un type numérique se fait à l'aide de 3 fonctions :
as.numeric(v)
Convertir en nombre (à virgule flottante),
as.double(v)
Convertir en nombre à virgule flottante,
as.integer(v)
Convertir en nombre entier.
Exemple :
> a = c(12L,7L,5L.3L,9L,24L)
> as.double(a)
> b = c(12,7,5.3,9.1,24)
> as.integer(b)
[1] 12 7 5 9 24
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_nombres 2/3
28/11/2021 00:46 Programmer en R/Manipuler les nombres — Wikilivres
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_nombres&oldid=650602 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_nombres 3/3
28/11/2021 00:46 Programmer en R/Manipuler les vecteurs — Wikilivres
Notion de vecteur
Dans le chapitre précédent on a pu voir qu'un nombre possède deux types numeric et vector. En
réalité il s'agit d'un vecteur qui ne contient qu'un seul nombre.
> a = 2
> is (a)
La notion de vecteur est essentielle. C'est cette structure de donnée qui est utilisée lorsque l'on
veut traiter une série de donnée.
Bien qu'étant essentiellement une série de valeurs, R fournit tout de même des opérateurs et
fonctions permettant de traiter les vecteurs comme en géométrie ou en algèbre (somme, produit
par un scalaire, produit scalaire entre deux vecteurs).
> a = c(12,7,5.3,9.1,24)
> a
> is (a)
> b
> is (b)
> c
[1] "Dans"
[2] "1"
[4] "1"
Les nombres [1], ..., [5] apparaissant ci-dessus sont les indices des différents éléments du
vecteur. Le premier indice d'un vecteur est 1.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_vecteurs 1/5
28/11/2021 00:46 Programmer en R/Manipuler les vecteurs — Wikilivres
c (http://stat.ethz.ch/R-manual/
Crée un vecteur à partir des éléments
R-devel/library/base/html/c.htm c(..., recursive=FALSE)
donnés en paramètre.
l)
seq(from = 1, to = 1, by
seq (http://stat.ethz.ch/R-manu = ((to -
al/R-devel/library/base/html/se Crée une suite arithmétique. from)/(length.out - 1)),
rep (http://stat.ethz.ch/R-manu
al/R-devel/library/base/html/re Duplique la valeur de x rep(x, ...)
p.html)
[1] 1.0 2.2 3.4 4.6 5.8 7.0 8.2 9.4 10.6 11.8 13.0
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
[1] 0 0 0 0 0 0 0 0 0 0
> print(x)
[1] 1 2 3 4 5 10 11 12 13 14 15
> x[6]
[1] 10
> x[4:7]
[1] 4 5 10 11
[1] 1 3 10
On peut aussi utiliser un vecteur de booléens ; R extrait alors les éléments correspondant aux
valeurs vraies. Par exemple :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_vecteurs 2/5
28/11/2021 00:46 Programmer en R/Manipuler les vecteurs — Wikilivres
> x[indices]
[1] 10 11 12 13 14 15
> a+b
[1] 10 8 8 5
> a/b
Si un vecteur est plus petit que l'autre, R répète les valeurs du plus petit vecteur jusqu'à générer un
vecteur de même taille que le plus grand. En particulier, si un des vecteurs est un scalaire, alors R
applique l'opération entre le scalaire et tous les éléments du vecteur
> a+5
[1] 6 7 8 9 10 11 12 13 14 15
> a %% 2 == 1
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
Ainsi, l'opération multiplication d'un vecteur par un scalaire correspond à l'opération algébrique.
> 4*v
[1] 8 12
Opérations algébriques
L'opérateur %*% (pourcent-astérisque-pourcent) effectue un produit scalaire, en supposant la base
orthonormale :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_vecteurs 3/5
28/11/2021 00:46 Programmer en R/Manipuler les vecteurs — Wikilivres
> u%*%v
[,1]
[1,] 1
Notons que le résultat est une matrice d'une seule composante (un tableau d'une seule case). On
peut extraire le résultat en prenant l'élément (1, 1) de la matrice, ou bien en faisant la somme
cumulée de ce vecteur :
> is(a)
> a[1, 1]
[1] 1
> cumsum(a)
[1] 1
> sqrt(u%*%u)
[,1]
[1,] 2.236068
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_vecteurs&oldid=636972 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_vecteurs 4/5
28/11/2021 00:46 Programmer en R/Manipuler les vecteurs — Wikilivres
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_vecteurs 5/5
28/11/2021 00:46 Programmer en R/Manipuler les chaînes de caractères — Wikilivres
Pré-requis
> library(stringr)
> class(x = x)
[1] "character"
[1] 6 6 6 5
Par exemple, on peut coller le vecteur c("la", "la", "l'", "la") avec le vecteur fruits et les
séparer par un espace :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_chaînes_de_caractères 1/2
28/11/2021 00:46 Programmer en R/Manipuler les chaînes de caractères — Wikilivres
Notes et références
Voir aussi
Stringr (http://stringr.tidyverse.org/)
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_chaînes_de_caractères&oldid=636971 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_chaînes_de_caractères 2/2
28/11/2021 00:47 Programmer en R/Manipuler les facteurs — Wikilivres
Introduction
Dans cette section, on génère aléatoirement un vecteur pouvant prendre trois valeurs : "fraise",
"banane" ou "orange". On part du vecteur contenant les trois valeurs :
On tire aléatoirement dans ce vecteur grâce à la fonction sample() avec l'option size=10 et
replace = TRUE (tirage avec remise.
> x
> class(x)
[1] "character"
Comme il prend un nombre fini de valeurs, on pourrait aussi le définir comme un facteur :
> x
[1] banane banane orange banane orange fraise fraise orange banane banane
> levels(x = x)
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_facteurs 1/2
28/11/2021 00:47 Programmer en R/Manipuler les facteurs — Wikilivres
Tri à plat
La fonction fct_count() permet de réaliser un tri à plat :
> fct_count(x)
# A tibble: 3 × 2
f n
<fctr> <int>
1 banane 5
2 fraise 2
3 orange 3
Notes et références
1. http://adv-r.had.co.nz/Data-structures.html#vectors
Voir aussi
Forcats (http://forcats.tidyverse.org/) sur tidyverse.org
Facteurs et vecteurs labellisés (http://larmarange.github.io/analyse-R/facteurs-et-vecteurs-la
bellises.html)
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_facteurs&oldid=636970 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_facteurs 2/2
28/11/2021 00:47 Programmer en R/Manipuler les dates et les heures — Wikilivres
La librairie lubridate définit un grand nombre de fonctions pour manipuler les dates et les
heures.
Pré-requis
install.packages(c("lubridate", "magrittr"))
library("lubridate")
library("magrittr")
[1] "2016-01-31"
[1] 2016
[1] 10
[1] Oct
Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov <
Dec
[1] 31
[1] 305
[1] 2
[1] Mon
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_dates_et_les_heures 1/3
28/11/2021 00:47 Programmer en R/Manipuler les dates et les heures — Wikilivres
[1] "2016-10-30"
[1] "2016-10-30"
[1] "2016-10-01"
[1] "2016-11-01"
[1] "2016-11-01"
[1] "2016-01-01"
[1] "2017-01-01"
[1] "2017-01-01"
> dseconds(10)
[1] "10s"
> dminutes(10)
> dhours(10)
Un intervalle de temps permet de définir un intervalle entre deux dates ou deux date-heure :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_dates_et_les_heures 2/3
28/11/2021 00:47 Programmer en R/Manipuler les dates et les heures — Wikilivres
[1] 76118400
[1] 881
[1] 125.8571
[1] 28.9
[1] 2.410959
Notes et références
Voir aussi
Vignette Lubridate (https://cran.r-
project.org/web/packages/lubridate/vignettes/lubridate.html), anglais
Dates and times (http://r4ds.had.co.nz/dates-and-times.html) dans l'ouvrage R for data-
science], anglais
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_dates_et_les_heures&oldid=636969 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_dates_et_les_heures 3/3
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
En R, les données tabulaires sont généralement modélisées dans des tableaux de données
(data.frame). Un tableau de données est une liste dont tous les éléments sont des vecteurs de
même taille.
La librairie tibble introduit une nouvelle classe pour les tableaux de données. Les tibbles se
comportent exactement comme les data.frame mais leurs options d'impression par défaut sont
différentes [1] .
Développée par Hadley Wickham, la librarie dplyr a pour objectif de définir une grammaire pour
la manipulation de données. Cette grammaire repose sur quelques verbes simples :
La librairie dplyr contient aussi la fonction group_by() qui permet d'effectuer chaque opération
sur des sous-groupes du jeu de données.
La librairie tidyr permet de mettre en forme un jeu de données en passant notamment des
données dont les valeurs sont réparties sur plusieurs colonnes dans un format long de type clé-
valeur et inversement des données sous forme clé-valeur dans un format large [2] . La librarie tidyr
contient donc essentiellement deux fonctions :
Pré-requis
Pour cette section, il faut avoir installé dplyr.
library(tibble)
library(tidyr)
library(dplyr)
Exemples
Dans cette section, nous prenons comme exemple le fichier des députés déposé par l'association
Wikimédia France sur la plateforme data.gouv.fr [3] . Ce fichier est au format CSV. Pour l'importer,
on utilise la fonction read_csv() de la librairie readr. Pour en savoir plus sur l'import des fichiers
CSV, on peut consulter la page Importer un fichier CSV.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 1/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
library(readr)
Afficher un aperçu
La fonction glimpse() permet d'afficher un aperçu du tableau de données avec le nombre
d'observations, le nombre de variables, le nom, le type et les premières valeurs de chacune
des colonnes.
La fonction str() produit un résultat similaire
La fonction head() permet d'afficher les premières lignes d'un tableau de données
+ glimpse()
Observations: 575
Variables: 10
$ sycomore_id <int> 3009, 17282, 3322, 17302, 17264, 18477, 921, 17275,
476, 17280, 1300, 1...
$ frwiki <chr>
"https://fr.wikipedia.org/wiki/Fran%C3%A7ois%20Fillon", "https://fr.wik...
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 2/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
Par exemple, sur la table des députés, on peut filtrer la table pour ne garder que les députés de
genre féminin :
+ filter(genre == "féminin")
# A tibble: 150 × 10
# ... with 140 more rows, and 5 more variables: lieu_naissance <chr>,
circonscription <chr>,
On peut aussi combiner plusieurs conditions. Dans l'exemple suivant, on filtre les députés de genre
féminin dont l'année de naissance est postérieure à 1976. On utilise la fonction year() de la
librairie lubridate() pour extraire l'année de la date de naissance.
library(lubridate)
# A tibble: 9 × 10
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 3/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
La fonction slice() permet de filtrer un tableau de données en fonction des numéros de ligne.
# A tibble: 10 × 10
table_deputes %>%
On peut aussi utiliser des fonctions pour sélectionner rapidement plusieurs colonnes.
La fonction starts_with() sélectionne toutes les colonnes dont les noms commencent par
une chaîne de caractères donnée.
La fonction ends_with() sélectionne toutes les colonnes dont les noms se terminent par
une chaîne de caractères donnée.
La fonction contains() sélectionne toutes les colonnes dont les noms comprennent une
chaîne de caractère donnée.
+ select(starts_with("nom")) %>%
+ head(n = 2)
# A tibble: 2 × 2
nom nom_famille
<chr> <chr>
>
+ select(ends_with("naissance")) %>%
+ head(n = 2)
# A tibble: 2 × 2
date_naissance lieu_naissance
<dttm> <chr>
1 1954-03-04 Le Mans
2 1973-12-06 Nantes
>
+ select(contains("nom")) %>%
+ head(n = 2)
# A tibble: 2 × 3
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 5/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
+ names()
+ arrange(date_naissance) %>%
+ head()
# A tibble: 6 × 10
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 6/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
Par défaut, la fonction arrange() trie les valeurs par ordre ascendant. Pour trier les valeurs par
ordre descendant, on peut combiner avec la fonction desc().
+ arrange(desc(date_naissance)) %>%
+ head()
# A tibble: 6 × 10
Par exemple, sur la table des députés, on a la date de naissance. On peut calculer donc calculer
l'âge des députés. Pour calculer l'âge, on utilise plusieurs fonction de la librairie lubridate. La
fonction today() donne la date d'aujourd'hui. La fonction interval() permet de définir un
intervalle de temps entre deux dates. Enfin, la fonction time_length() permet de convertir un
intervalle de temps en un nombre dans une unité donnée. Ici, on choisit d'exprimer l'âge en année.
Dans l'exemple, on combine aussi avec les fonctions select() et glimpse() pour afficher un
aperçu du nouveau jeu de données avec la nouvelle variable.
> library(lubridate)
+ mutate(
+ age = time_length(
+ interval(
+ start = date_naissance,
+ end = today()
+ ),
+ unit = "year"
+ )
+ ) %>%
+ glimpse()
Observations: 575
Variables: 3
On peut par exemple reprendre l'exemple précédent et calculer l'âge moyen des députés. Pour cela,
il suffit de définir la variable age = mean(age) dans la fonction summarise().
+ mutate(
+ age = time_length(
+ interval(
+ start = date_naissance,
+ end = today()
+ ),
+ unit = "year"
+ )
+ ) %>%
+ summarise(age = mean(age))
# A tibble: 1 × 1
age
<dbl>
1 58.80746
+ mutate(
+ age = time_length(
+ interval(
+ start = date_naissance,
+ end = today()
+ ),
+ unit = "year"
+ )
+ ) %>%
+ summarise(
+ age_moyen = mean(age),
+ age_median = median(age),
+ ecarttype_age = sd(age),
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 8/9
28/11/2021 00:47 Programmer en R/Manipuler un tableau de données — Wikilivres
+ min_age = min(age),
+ max_age = max(age)
+ )
# A tibble: 1 × 5
Voir aussi
anglais : Introduction to dplyr (https://cran.rstudio.com/web/packages/dplyr/vignettes/introduc
tion.html) par Hadley Wickham]
anglais : Data transformation (http://r4ds.had.co.nz/transform.html) dans l'ouvrage R for
Data Science de Garrett Grolemund et Hadley Wickham
Listes et tableaux de données (http://larmarange.github.io/analyse-R/listes-et-tableaux-de-do
nnes.html#tableaux-de-donnees) sur le site Introduction à l'analyse d'enquêtes avec R et
RStudio
anglais : Tibbles (http://r4ds.had.co.nz/tibbles.html) dans l'ouvrage R for Data Science de
Garrett Grolemund et Hadley Wickham
Notes et références
1. http://r4ds.had.co.nz/tibbles.html#tibbles-vs.data.frame
2. http://vita.had.co.nz/papers/tidy-data.html
3. http://www.data.gouv.fr/fr/datasets/listes-de-personnalites-issues-de-wikidata-1/
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_un_tableau_de_données&oldid=638283 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_un_tableau_de_données 9/9
28/11/2021 00:48 Programmer en R/Manipuler une liste — Wikilivres
À la différences des vecteurs, les listes peuvent contenir des objets de natures différentes.
Une liste
peut combiner des vecteurs, des scalaires, des tableaux de données, etc.
Pré-requis
Dans cette section, nous prenons comme exemple le fichier JSON correspondant à l'élément
Wikidata Paris.
Ce fichier peut être importé sous forme de liste dans R grâce à la fonction
fromJSON().
library(jsonlite)
library(listviewer)
jsonedit(q90)
List of 1
$ entities:List of 1
..$ Q90:List of 12
.. ..$ ns : int 0
.. ..$ descriptions:List of 55
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_une_liste 1/2
28/11/2021 00:48 Programmer en R/Manipuler une liste — Wikilivres
Voir aussi
Recursive lists (http://r4ds.had.co.nz/vectors.html#lists) dans R for data-science (anglais)
Simplifying data from a list of GitHub users (https://jennybc.github.io/purrr-tutorial/index.html)
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R/Manipuler_une_liste&oldid=636966 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_une_liste 2/2
28/11/2021 00:48 Programmer en R/Importer un fichier CSV — Wikilivres
Un fichier CSV est un fichier texte qui contient des données. En général, les valeurs sont séparées
par des virgules. Néanmoins, on trouve aussi souvent des valeurs séparées par des points virgules
(;) et il arrive que l'on trouve de nombreux autres séparateurs comme des pipes (|) ou même des
croisillons (#).
Dans la version basique de R, les fichiers CSV peuvent être importés avec les fonctions
read.csv(), read.csv2() et read.table().
La librairie readr développée par Hadley Wickham définit les fonctions read_csv(),
read_csv2() et read_delim() qui ont de meilleures performances et de meilleurs paramètres par
défaut que les fonctions standards.
Il existe aussi d'autre possibilité avec la librairie rio et la fonction fread() de la librairie
data.table.
Pré-requis
install.packages(c("readr", "dplyr"))
library(dplyr)
library(readr)
> library(readr)
> library(dplyr)
+ glimpse()
Observations: 575
Variables: 10
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_un_fichier_CSV 1/3
28/11/2021 00:48 Programmer en R/Importer un fichier CSV — Wikilivres
$ sycomore_id (int) 3009, 17282, 3322, 17302, 17264, 18477, 921, 17275,
476, 17280, 1300, 17274,...
$ frwiki (chr)
"https://fr.wikipedia.org/wiki/Fran%C3%A7ois%20Fillon",
"https://fr.wikipedi...
La fonction read_csv() essaie de deviner le type de chaque variable. On peut aussi indiquer à la
fonction le type de chaque variable à l'aide de l'argument col_types. Les types doivent être
spécifiés dans la fonction cols() :
+ col_types = cols(
+ nom = col_character(),
+ genre = col_character(),
+ prenom = col_character(),
+ date_naissance = col_datetime(),
+ lieu_naissance = col_character(),
+ circonscription = col_character(),
+ sycomore_id = col_character(),
+ wikidata = col_character(),
+ frwiki = col_character()
+ )
+ ) %>%
+ glimpse()
Observations: 575
Variables: 10
1973-03-23, 1989-12-10...
$ frwiki <chr>
"https://fr.wikipedia.org/wiki/Fran%C3%A7ois%20Fillon", "https://fr.wik...
Notes et références
1. http://www.data.gouv.fr/fr/datasets/listes-de-personnalites-issues-de-wikidata-1/
Voir aussi
anglais : readr (http://readr.tidyverse.org/) sur tidyverse.org
anglais : data-import (http://r4ds.had.co.nz/data-import.html) dans le livre R for Data Science
de Garrett Grolemund et Hadley Wickham
Importer un fichier texte (http://larmarange.github.io/analyse-R/import-de-donnees.html#impo
rter-des-fichiers-texte) dans Introduction à l’analyse d’enquêtes avec R et RStudio
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Importer_un_fichier_CSV&oldid=647817 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_un_fichier_CSV 3/3
28/11/2021 00:48 Programmer en R/Résoudre les problèmes d'encodage des caractères — Wikilivres
L'import de fichiers CSV et des fichiers texte en général peut poser des problèmes d'encodage de
caractères. Dans cette section, nous passons en revue des méthodes pour détecter l'encodage d'un
fichier et convertir le fichier avant de l'importer dans R. Ces méthodes fonctionnent sous Mac OS
X et Linux.
Détecter l'encodage
Dans cette section, nous prenons pour exemple la liste des départements 2016 publiées par
l'Insee [1] .
Pour les utilisateurs de Mac OS X et Linux, nous recommandons d'ouvrir une fenêtre d'un
Terminal, d'aller dans le dossier correspondant (avec la commande cd) et d'utiliser la commande
file -i
$ cd ~/Documents/monprojet/data/
$ file -i depts2016.txt
Dans certains cas, cette commmande permet de connaître l'encodage des caractères. Dans ce cas
précis, nous n'avons pas d'information sur l'encodage des caractères dans ce fichier. Nous allons
utiliser la commande chardetect.
Pour installer chardetect, il suffit d'utiliser la commmande pip install dans un terminal :
$ chardetect depts2016.txt
La commande nous indique que le fichier depts2016.txt est probablement encodé en windows-
1252.
https://fr.wikibooks.org/wiki/Programmer_en_R/Résoudre_les_problèmes_d%27encodage_des_caractères 1/2
28/11/2021 00:48 Programmer en R/Résoudre les problèmes d'encodage des caractères — Wikilivres
Pour convertir le fichier en encodage utf-8 (l'encodage couramment utilisé sur Linux et Mac OS X),
on utilise la commande iconv. iconv trois paramètres : l'encodage d'origine (-f pour from),
l'encodage de destination (-t pour to) et le nom du fichier :
Pour enregistrer le résultat, on peut imprimer le résultat de cette commande dans un nouveau
fichier texte en indiquant tout simplement le nom du fichier de destination après un chevron > :
Notes et références
1. http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2016/txt/depts2016.txt
Voir aussi
iconv (https://doc.ubuntu-fr.org/iconv) sur la documentation francophone de la distribution
Ubuntu
tutoriel encodage des caractères (https://doc.ubuntu-fr.org/tutoriel/encodage_caracteres) sur
la documentation francophone de la distribution Ubuntu
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Résoudre_les_problèmes_d%27encodage_des_caractères&oldid=636960 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Résoudre_les_problèmes_d%27encodage_des_caractères 2/2
28/11/2021 00:48 Programmer en R/Importer un fichier TSV — Wikilivres
Comme les fichiers CSV, les fichiers TSV sont des fichiers textes dans lesquelles les valeurs sont
séparées par des tabulations.
La fonction read_tsv() dans la librairie readr permet de les importer de manière efficace.
Par exemple, la liste des départements publiées sur le site de l'Insee est disponible au format
TSV [1] . Après avoir converti le fichier en encodage UTF-8 (voir le chapitre Résoudre les problèmes
d'encodage des caractères), on peut importer le fichier dans R avec la commande suivante :
Observations: 101
Variables: 6
$ REGION <chr> "84", "32", "84", "93", "93", "93", "84", "44", "76",
"44", "76", "76", "93", ...
$ DEP <chr> "01", "02", "03", "04", "05", "06", "07", "08", "09",
"10", "11", "12", "13", ...
$ TNCC <int> 5, 5, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 4, 2, 2, 3, 3, 2, 3,
3, 3, 3, 4, 3, 3, 2, ...
Notes et références
1. http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2016/txt/depts2016.txt
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Importer_un_fichier_TSV&oldid=636958 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_un_fichier_TSV 1/1
28/11/2021 00:49 Programmer en R/Importer un fichier texte à largeur fixe — Wikilivres
Exemple
On prend pour example le fichier FANTOIR sur data.gouv.fr [1] .
$ wget https://www.data.gouv.fr/fr/datasets/r/008e7b8f-f52c-4dc6-89ca-
3bed2b103746
$ mv 008e7b8f-f52c-4dc6-89ca-3bed2b103746 fantoir.zip
$ unzip fantoir.zip
Lire le fichier
On peut le lire facilement avec R et la librairie `readr` :
http://readr.tidyverse.org/reference/read_fwf.html
library(readr)
Pour avoir un aperçu des données, on peut utiliser la fonction `glimpse()` de `dplyr`
library(dplyr)
Notes et références
1. https://gist.github.com/pachevalier/d3fbf7c0bf01a71a36bd2d7de40c141c
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Importer_un_fichier_texte_à_largeur_fixe&oldid=636957 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_un_fichier_texte_à_largeur_fixe 1/2
28/11/2021 00:49 Programmer en R/Importer un fichier texte à largeur fixe — Wikilivres
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_un_fichier_texte_à_largeur_fixe 2/2
28/11/2021 00:50 Programmer en R/Importer des données depuis un tableur — Wikilivres
Pour importer des données depuis un tableur Excel, on peut utiliser la librairie readxl développée
par Hadley Wickham.
On peut tout d'abord faire la liste des feuilles (ou onglets) du tableur excel avec la fonction
excel_sheets() :
library(readxl)
excel_sheets(path = "data/frup1606.xlsx")
On peut ensuite importer la première feuille avec la fonction read_excel(). La fonction glimpse(),
issue de la librairie dplyr, permet d'avoir un aperçu des données.
> read_excel(
+ path = "data/frup1606.xlsx",
+ sheet = "FRUP1306"
+ ) %>%
+ glimpse()
Observations: 65,534
Variables: 13
$ Code (terminaison) (dbl) 15, 11, 157, 5, 142, 504, 384, 26, 13, 114,
147, 178, 245, 267, 287, ...
$ Dernière modif statuts (time) NA, 1958-04-12, NA, 1972-04-28, NA, NA, NA,
2008-01-29, 2016-04-15, ...
$ Adresse.Adr2 (chr) NA, NA, "BP 6", NA, NA, NA, NA, NA, NA, NA,
"4, avenue Pauliani", NA,...
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_des_données_depuis_un_tableur 1/2
28/11/2021 00:50 Programmer en R/Importer des données depuis un tableur — Wikilivres
$ Code Postal (dbl) 1390, 2300, 2830, 3600, 3200, 3200, 4100,
5107, 6200, 6000, 6046, 600...
On peut aussi enregistrer les données dans un objet pour les réutiliser par la suite :
path = "data/frup1606.xlsx",
sheet = "FRUP1306"
Notes et références
1. http://www.data.gouv.fr/fr/datasets/frup-30-juin-2016/
Voir aussi
Import des données Excel (http://larmarange.github.io/analyse-R/import-de-donnees.html#ex
cel) dans Introduction à l’analyse d’enquêtes avec R et RStudio
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Importer_des_données_depuis_un_tableur&oldid=636954 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Importer_des_données_depuis_un_tableur 2/2
28/11/2021 00:50 Programmer en R/Import un fichier JSON — Wikilivres
Chaque élément de Wikidata peut être exporté au format JSON. Par exemple, l'entité q90 (ie
Paris), accessible à l'URL https://www.wikidata.org/wiki/Q90, peut être exportée au format
JSON à l'url https://www.wikidata.org/wiki/Special:EntityData/Q90.json
library(jsonlite)
En général, les fichiers JSON peuvent être manipulés en R sous forme de liste.
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Import_un_fichier_JSON&oldid=636956 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Import_un_fichier_JSON 1/1
28/11/2021 00:50 Programmer en R/Extraire des données d'une page web — Wikilivres
Syntaxe
x
Plusieurs types possibles :
Une chaîne de caractère représentant soit l'URL, soit le contenu lui-même,
Une connexion ouverte, auquel cas tout le contenu est lu dans un vecteur avant
interprétation.
Si un chemin local se termine par une des extensions .gz, .bz2, .xz, .zip, le fichier est
automatiquement décompressé.
encoding
Encodage par défaut. S'il n'est pas spécifié, la fonction détecte les encodages UTF-8 ou
UTF-16.
as_html
Booléen indiquant d'interpréter le contenu au format HTML plutôt que XML.
options
Série d'options d'interprétation :
RECOVER : Récupération en cas d'erreur,
NOENT : Substituer les entités (& " ...),
DTDLOAD : Charger les DTD externes,
DTDATTR : Attributs DTD par défaut,
DTDVALID : Valider la syntaxe du contenu avec la DTD,
NOERROR : Supprimer les rapports d'erreur,
NOWARNING : Supprimer les rapports d'avertissement,
PEDANTIC : Vérification moins stricte,
NOBLANKS : Enlever les nœuds vides,
SAX1 : Utiliser l'interface SAX1 en interne,
XINCLUDE : Implémenter la substitution XInclude
NONET : Empêcher la connexion réseau (n'autorise qu'un chemin local),
NODICT : Ne pas réutiliser le dictionnaire de contexte,
NSCLEAN : Enlever les déclarations redondantes d'espaces de noms,
NOCDATA : Fusionner les CDATA comme nœuds de texte,
NOXINCNODE : Ne pas générer de nœuds XINCLUDE START/END,
COMPACT : Compacter les nœuds textes de petite taille ; modifications de
l'arborescence non autorisées par la suite, sinon un plantage est possible,
https://fr.wikibooks.org/wiki/Programmer_en_R/Extraire_des_données_d%27une_page_web 1/2
28/11/2021 00:50 Programmer en R/Extraire des données d'une page web — Wikilivres
Exemple
L'exemple suivant récupère le contenue d'une page HTML, en passant l'URL et l'encodage par
défaut à la fonction read_html :
Documentation
https://www.rdocumentation.org/packages/xml2/versions/1.3.2/topics/read_xml
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Extraire_des_données_d%27une_page_web&oldid=650559 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Extraire_des_données_d%27une_page_web 2/2
28/11/2021 00:50 Programmer en R/Comprendre la grammaire des graphiques — Wikilivres
Ensuite définir les différentes couches avec les fonctions geom_ (geom_point(), geom_bar,
geom_line(), etc) ou stat_ (stat_density(), stat_count(), etc). Pour chacune de ses
fonctions, l'argument mapping et la fonction aes() permettent de définir la correspondance
entre des variables et les attributs esthétiques.
L'utilisateur peut choisir un thème choisi à partir d'une liste de thèmes prédéfinis
(theme_tufte(), theme_stata(), etc) ou avec la fonction theme().
Il est aussi possible de réaliser le graphe sur des sous-échantillons du jeu de données avec les
fonctions facet_().
Pré-requis
Dans cette section, l'exemple utilise la base de données des députés déjà utilisée auparavant, en
travaillant avec la bibliothèque ggplot2.
library(dplyr)
library(ggplot2)
library(readr)
Choix de la géométrie
Pour réaliser un diagramme en barres, on utilise la géométrie geom_bar(). Ici, on associe à l'axe
des abscisses le genre et on associe la statistique de comptage au genre.
table_deputes %>%
ggplot() +
geom_bar(
https://fr.wikibooks.org/wiki/Programmer_en_R/Comprendre_la_grammaire_des_graphiques 1/2
28/11/2021 00:50 Programmer en R/Comprendre la grammaire des graphiques — Wikilivres
stat = "count"
table_deputes %>%
ggplot() +
geom_bar(
stat = "count"
) +
scale_x_discrete(name = "Genre") +
scale_fill_discrete() +
labs(
caption = "Source : Liste des députés publiés par Wikimédia France sur
data.gouv.fr"
Notes et références
1. http://r4ds.had.co.nz/data-visualisation.html
Voir aussi
Hadley Wickham, « A Layered Grammar of Graphics », Journal of Computational and
Graphical Statistics, vol. 19, no. 1, pp. 3–28, 2010.
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Comprendre_la_grammaire_des_graphiques&oldid=636959 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Comprendre_la_grammaire_des_graphiques 2/2
28/11/2021 00:51 Programmer en R/Représenter une carte — Wikilivres
On peut télécharger les contours des départements français sur le site data.gouv.fr [1] . On peut
importer les données au format Shapefile grâce à la fonction readOGR() de la librairie rgdal :
library(rgdal)
"data/departements-20140306-100m-shp/",
layer= "departements-20140306-100m"
library(stringr)
library(magrittr)
spdf_departement %>%
subset(. , str_length(code_insee) == 2)
library(stringr)
library(magrittr)
spdf_departement %>%
plot()
https://fr.wikibooks.org/wiki/Programmer_en_R/Représenter_une_carte 1/3
28/11/2021 00:51 Programmer en R/Représenter une carte — Wikilivres
library(ggplot2)
library(rgeos)
library(maptools)
Comme dans l'exemple plus haut, on peut filtrer les départements de France métropolitaine avec
la fonction str_length() du paquet stringr et la fonction filter du paquet dplyr.
library(dplyr)
df_departement %>%
filter(str_length(id) == 2)
library(dplyr)
df_departement %>%
filter(str_length(id) == 2) %>%
ggplot() +
geom_polygon(
coord_map(projection = "mercator") +
theme(axis.text = element_blank(),
axis.title = element_blank()) +
library(leaflet)
library(stringr)
library(magrittr)
spdf_departement %>%
leaflet() %>%
addTiles() %>%
addPolygons()
https://fr.wikibooks.org/wiki/Programmer_en_R/Représenter_une_carte 2/3
28/11/2021 00:51 Programmer en R/Représenter une carte — Wikilivres
Notes et références
1. https://www.data.gouv.fr/fr/datasets/contours-des-departements-francais-issus-d-
openstreetmap/
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Représenter_une_carte&oldid=636961 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Représenter_une_carte 3/3
28/11/2021 00:51 Programmer en R/Visualiser une carte choroplèthe — Wikilivres
Pour illustrer la géographie de la démographie française, on peut colorier les différents département selon le taux
d'accroissement de la population.
L'INSEE fournit les données de population par commune, on les enregistre dans un fichier csv (population.csv) sous
la forme :
Les données INSEE comportent de nombreuses autres colonnes qui ne nous intéressent pas ici.
On aura également besoin d'un fichier departement.csv pour lier les numéro de département a leurs nom.
"DEP" "NOM"
01 "Ain"
02 "Aisne"
03 "Allier"
04 "Alpes-de-Haute-Provence"
05 "Hautes-Alpes"
> df$CLASS <- cut (df$TAUX, c(-Inf, -6, -4, -2, 0, 2, 4, 6, Inf), right=TRUE)
> col <- c(rgb (1:4/4, 0, 0), rgb (0, 4:1/4, 0))
> box()
https://fr.wikibooks.org/wiki/Programmer_en_R/Visualiser_une_carte_choroplèthe 1/2
28/11/2021 00:51 Programmer en R/Visualiser une carte choroplèthe — Wikilivres
De premier abord, ce genre de carte n'est pas évident à obtenir, mais une fois le principe compris, cela devient
extrêmement efficace. Nous y reviendrons dans le chapitre Créer des cartes.
Récupérée de « https://fr.wikibooks.org/w/index.php?title=Programmer_en_R/Visualiser_une_carte_choroplèthe&oldid=636963 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Visualiser_une_carte_choroplèthe 2/2
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
Manière simple
y = a + bx.
Le plus simple pour faire la régression consiste à utiliser la commande line (au singulier).
print(modele)
ce qui donne
Call:
line(u1, u2)
Coefficients:
y = - 0,015,80 + 2,024,39·x
plot(u1, u2)
abline(modele)
Manière complète
Pour effectuer une régression, il faut créer une structure de données (data frame) et un modèle. Le
modèle est une formule symbolique :
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 1/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
print(modele)
summary(modele)
ce qui donne
Call:
Coefficients:
(Intercept) u1
-0.0158 2.0244
Call:
Residuals:
Coefficients:
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
u2 = 2,024,39·u1 - 0,015,80
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 2/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
plot(u1, u2)
Nous pouvons ensuite utiliser ce modèle pour calculer de nouvelles valeurs de y pour des valeurs
de x données, avec un intervalle de confiance. Par exemple, pour avoir y en 0,3, 0,5 et 0,7 avec un
intervalle de confiance de 0,95 (95 %) :
Procédure simple
u2 = a + b×u1 + ε
cor(u1, u2)
L'interprétation de ce coefficient dépend du domaine étudié, mais plus la valeur absolue est proche
de 1, plus les données « collent » au modèle affine. On s'attache souvent à avoir une valeur absolue
supérieure à 0,8 ; elle doit être en tous cas supérieure à 0,5.
print(modele)
Cette fonction utilise la méthode médiane-médiane, dite aussi « droite robuste de Tukey ».
Par exemple :
# ********************
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 3/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
# **************************
# Coefficient de corrélation
# ****************************
# *********
# Affichage
1e-3*round(1e3*coefcorr)))
print(modele)
Call:
line(u1, u2)
Coefficients:
u2 = 0,030,07 + 1,939,65×u1 + ε.
Nous pouvons extraire les paramètres avec modele$coefficients, qui est un vecteur, ou la
fonction coef(modele) qui retourne également un vecteur. Cela permet tracer les données en
superposant la droite aux données :
# *****
# Tracé
plot(u1, u2)
abline(modele)
# Première manière
a <- coef(modele)[1]
b <- coef(modele)[2]
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 4/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
# Seconde manière
a <- modele$coefficients[1]
b <- modele$coefficients[2]
Procédure complète
Une fois cette régression faite, il faut poursuivre par les tests de nullité : les coefficients a et b sont-
ils significativement non nuls ? Cela nécessite de calculer l'estimateur de la variance sur a et b,
puis, le cas échéant, de faire une régression en forçant le passage de la droite par l'origine.
Pour cela, on fait appel à la fonction lm(), qui utilise elle la méthode des moindres carrés. Cette
fonction nécessite de définir le modèle utilisé sous la forme d'une « formule », une description
symbolique du modèle. Une formule est introduite par le tilde ~. Les deux formules que nous
utilisons ici sont :
u2 ~ u1 # modèle affine
u2 ~ u1 + 0 # modèle linéaire
# ******************************
print(modele)
plot(u1, u2)
abline(modele)
Au passage, on remarque que les coefficients obtenus sont légèrement différents. Puis, on effectue
le test de non nullité de b et de a (coefficient 3 pour un intervalle de confiance de 99,7 %) :
# ********************
# test sur b
# Test sur a
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 5/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
# Affichage
a <- 0
b <- coef(modele)
ecart_type_b = sommaire$coefficients[1]
} else {
a <- coef(modele)[1]
b <- coef(modele)[2]
ecart_type_b = sommaire$coefficients[2,2]
print(modele)
Puis, on calcule les erreur standard sur a, b, et sur l'estimation des y si l'on utilise le modèle (en
considérant un grand nombre de valeurs et un intervalle de confiance de 99,7 %) :
# **********************
coef_erreur = qnorm(1-alpha/2)
b <- modele$coefficients[2]
a <- modele$coefficients[1]
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 6/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
ce qui donne
plot(modele)
qui comprend :
Nous avons vérifié si les paramètres obtenus étaient différents de zéro de manière significative.
Mais on peut aussi vérifier s'ils sont différent d'une valeur a priori. La commande
pt(x, n)
donne la fonction de répartition de la loi de Student à n degrés de liberté (voir Les loi de
probabilités, ajustement et test), c'est-à-dire la probabilité d'avoir une valeur inférieure ou égale à
x, et la fonction
calcule la probabilité complémentaire. Le paramètre βi est estimé par la valeur bi, avec
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 7/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
βi = bi ± t1-α/2, n×si
la fonction pt() nous renvoyant la valeur de 1-α/2, ou de α/2 avec l'option lower.tail = FALSE.
Ici, nous savons que la valeur théorique est 2, donc
bth <- 2
Utilisation du modèle
Au delà du calcul des paramètres du modèle, R permet d'exploiter ce modèle, c'est-à-dire qu'il
calcule la valeur de y pour un x donné, et fournit avec l'intervalle de confiance. Cela se fait avec la
commande
où
Par exemple, pour avoir la valeur de y en 0,3, 0,5 et 0,7 avec un inetrvalle d econfiance de 95 % :
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 8/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
Lorsque le modèle est linéaire pour les coefficients mais pas pour les fonctions des variables
explicatives, on peut vérifier graphiquement l'adéquation du modèle avec fitted(modele). Par
exemple, pour un modèle de type
u2 = a + b⋅u12 + ε
# ********************
# ******************************
print(modele)
plot(u1, u2)
lines(u1, fitted(modele))
y = β0 + β1⋅x1 + β1⋅x2 + ε
Par exemple :
Régression linéaire pour un modèle
à deux variables.
# ********************
n <- 5
# variables explicative
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 9/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
# variable expliquée
# ******************************
print(modele)
# ************************
# représentation graphique
donne
Call:
Coefficients:
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Estimer_un_modèle_de_régression_linéaire&oldid=636964 »
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 10/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression linéaire — Wikilivres
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_linéaire 11/11
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression circulaire — Wikilivres
;
soit en développant :
Données
pour la
régression
circulaire
x y
0.7 4.0
3.3 4.7
5.6 4.0
7.5 1.3
6.4 -1.1
4.4 -3.0
0.3 -2.5
-1.1 1.3
plot(x, y, col='blue')
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_circulaire 1/3
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression circulaire — Wikilivres
print(cercle)
ce qui donne
Call:
Coefficients:
(Intercept) x y
xc <- coef(cercle)[2]/2
yc <- coef(cercle)[3]/2
ce qui donne
3.060304
0.7436073
(Intercept)
4.109137
soit un cercle de centre (3,060,304 ; 0,743,607,3) et de rayon 4,109,137. Puis nous traçons le
modèle
Notes et références
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_circulaire 2/3
28/11/2021 00:52 Programmer en R/Estimer un modèle de régression circulaire — Wikilivres
1. anglais D. Gruntz, « Finding the Best Fit Circle », dans The MathWorks Newsletter, vol. 1,
1990, p. 5
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Estimer_un_modèle_de_régression_circulaire&oldid=636968 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Estimer_un_modèle_de_régression_circulaire 3/3
28/11/2021 00:52 Programmer en R/Programmer une boucle — Wikilivres
Boucle itérative
instruction
où variable est un nom de variable, et vecteur est un vecteur contenant les valeurs successive que
va prendre la variable. Par exemple, pour calculer 10! (factorielle dix) « à la main » :
factorielle <-1
La structure
repeat bloc
répète le bloc. La structure ne possède pas en elle-même de condition d'arrêt ; celle-ci doit être
incluse dans le bloc considéré, la sortie de la boucle se faisant par la commande break. Par
exemple, le code ci-dessous calcule 10!, la variable i étant décrémentée :
i <- 10
factorielle <- 1
repeat {
i <- (i - 1)
if (i == 1) break
https://fr.wikibooks.org/wiki/Programmer_en_R/Programmer_une_boucle 1/2
28/11/2021 00:52 Programmer en R/Programmer une boucle — Wikilivres
i <- 10
factorielle <- 1
while (i > 1) {
i <- (i - 1 )
l'instruction break, comme nous l'avons déjà vu, permet d'interrompre une boucle ;
l'interpréteur exécute ensuite l'instruction qui suit la boucle ;
l'instruction next force le passage à l'itération suivantes : l'interpréteur exécute la première
instruction de la boucle.
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Programmer_une_boucle&oldid=636973 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Programmer_une_boucle 2/2
28/11/2021 00:53 Programmer en R/Programmer une fonction — Wikilivres
Une fonction est un sous-programme, c'est-à-dire une portion de code qui est exécutée lorsqu'on
l'appelle.
Une fonction est mise dans une variable contenant un bloc d'instructions introduit par la
commande function(). La syntaxe générale est :
instructions
par exemple
> carre(2)
[1] 4
L'évaluation de la fonction renvoie la dernière valeur calculée. On peut préciser la valeur retournée
par la commande return() :
instructions
return(valeur)
par exemple
y <- x*x
return(y)
https://fr.wikibooks.org/wiki/Programmer_en_R/Programmer_une_fonction 1/3
28/11/2021 00:53 Programmer en R/Programmer une fonction — Wikilivres
Les fonctions mathématiques primitives de R s'appliquent sur des vecteurs. On s'attachera donc à
créer des fonctions qui s'appliquent elles-mêmes à des vecteurs. Par exemple, la fonction suivante
permet de définir une courbe en cloche dissymétrique, formée de deux demies gaussiennes de
largeur différentes.
return(y)
Le fait d'utiliser la matrice de booléens indice permet, au sein d'une seule fonction, de séparer les
cas x < A[1] et x ≥ A[1]. On peut donc utiliser cette fonction sur un vecteur :
A <- c(1, 1, 2, 5)
y <- gauss_dissym(A , x)
plot(x, y, "l")
Si l'on n'arrive pas à faire autrement, on peut toujours faire défiler les indices avec une boucle,
mais l'évaluation de la fonction est alors plus lente.
Récursivité
Le langage S est un langage récursif. Une fonction définie dans un script R peut donc s'appeler
elle-même, avec la précaution d'usage : il faut prévoir une condition d'arrêt. Comme dans tous les
langages récursifs, R crée un environnement spécifique pour l'exécution de la fonction (variables
locales), il « empile » les différents appels, puis les « dépile » lorsque la condition d'arrêt est
atteinte.
https://fr.wikibooks.org/wiki/Programmer_en_R/Programmer_une_fonction 2/3
28/11/2021 00:53 Programmer en R/Programmer une fonction — Wikilivres
return(resultat)
Mais nous remarquons que cette fonction ne s'applique qu'aux scalaires, en raison de la présence
du test if (n == 1) : la condition if ne s'applique que sur un scalaire booléen. On peut modifier
le code pour le rendre exécutable sur les vecteurs :
indice <- (n == 1)
return(n)
Comme souvent, on crée un vecteur de booléens appelé indice. Si toutes les valeurs sont à « 1 »,
alors on retourne le vecteur lui-même (puisque 1! = 1) ; c'est l'arrêt de la récursion. Sinon, on
extraie le sous-vecteur dont les valeurs ne sont pas « 1 », et l'on applique la récursion.
> print(x)
[1] 1 2 3 4 5 1 2 3 4 5
> factorielle(x)
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Programmer_une_fonction&oldid=636974 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Programmer_une_fonction 3/3
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
Soit une fonction ƒ à valeurs réelles, définie sur un espace vectoriel de dimension n :
On recherche le minimum de ƒ, c'est-à-dire un vecteur (x1*, x2*, …, xn*) tel que la valeur de ƒ soit
la plus petite possible.
Les méthodes de régression consistent à ajuster un modèle à des données. Elles consistent à
minimiser une fonction d'écart, à l'optimiser.
optimize(fct, intervalle)
où
fct est la fonction à minimiser, voir Programmation procédurale > Fonctions définies par
l'utilisateur ;
intervalle est l'intervalle sur lequel il effectue la recherche ;
maximum = est un booléen : « vrai » si l'on cherche la maximum, « faux » (valeur par défaut)
si l'on cherche le minimum.
ƒ(x) = sin(x)
print(minf$minimum)
print(minf$objective)
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 1/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
print(maxf$maximum)
print(maxf$objective)
[1] -1.570798
[1] -1
[1] 1.570798
[1] 1
Donc, le minimum est en −1,570,798, qui est une approximation de -π/2 ≃ −1,570,796, et la
fonction y vaut -1. Le maximum est en 1,570,798, qui est une approximation de π/2, et la fonction
y vaut 1.
On peut lui indiquer la tolérance visée sur le résultat, avec l'option tol =. Par exemple, pour avoir
une précision de 10-6 :
Nous disposons également de la commande optim() ; elle ne cherche que le minimum, elle ne
permet pas par défaut de définir un intervalle, et il faut lui donner un point de départ ; par contre,
elle permet de travailler avec des fonctions de plusieurs variables. Sa syntaxe globale est :
optim(x0, f)
où
ƒ(x) = 5x2 + 3x - 4
x0 = 0
solution = optim(x0, f)
> solution$par
[1] -0.3
> solution$value
[1] -4.45
> solution
$par
[1] -0.3
$value
[1] -4.45
$counts
function gradient
26 NA
$convergence
[1] 0
$message
NULL
$count : le nombre de fois (26) qu'il a fallu appeler la fonction f ; c'est globalement le nombre
d'itérations qui a été nécessaire pour trouver la solution ;
$convergence : la qualité de la convergence ; « 0 » indique que la méthode a bien
convergé ;
$message : un message éventuel du solveur (aucun).
La commande permet donc de travailler avec une fonction de plusieurs variables, par exemple si
l'on considère la fonction
ƒ(x, y) = x2 + y2 - 10x - 8y + 41
x0 <- c(0, 0)
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 3/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
print(solution$par)
print(solution$value)
ce qui donne
[1] -25
Si la fonction possède des paramètres, on doit les passer en utilisant leur nom exact. Par exemple,
si la fonction est
x0 <- c(0, 0)
print(solution$par)
print(solution$value)
ce qui donne
[1] -25
inégalités : ui×xi ≥ ci
Le logiciel R propose la commande constrOptim(), qui fait appel au solveur optim() mais en
ajoutant une fonction de pénalité pour gérer les contraintes. La syntaxe de base est :
constrOptim(x0, f, NULL, u, c)
constrOptim(par = x0, fn = f, ui = u, ci = c)
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 4/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
où
x0 est le vecteur de départ, qui doit être dans la zone de faisabilité, c'est-à-dire vérifier les
inégalités de contrainte ;
f est la fonction ;
NULL indique que l'on ne définit pas la fonction gradient ;
u et c sont des vecteurs représentant les contraintes.
Par exemple, si l'on veut rechercher le minimum de la fonction y = sin(x) sur l'intervalle [-π ; π] :
1×x ≥ -π,
-1×x ≥ -π
et ;
on part de x0 = 0.
x0 <- matrix(0, 1, 1)
f <- sin
La résolution provoque des messages d'avertissement, qui sont sans conséquence ici. L'abscisse de
la solution est donnée par
> solution$par
[,1]
[1,] -1.57066
qui est une approximation de -π/2 ≃ -1,570,8 ; la valeur de la fonction en ce point est donnée par
> solution$value
[,1]
[1,] -1
$par
[,1]
[1,] -1.57066
$value
[,1]
[1,] -1
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 5/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
$counts
function gradient
62 NA
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 3
$barrier.value
[,1]
[1,] -0.0008014317
Fonction optimize()
Méthode de Nelder-Mead
Cet algorithme fonctionne lorsque la fonction n'est pas dérivable (mais elle doit être continue). Par
contre, il n'est pas adapté aux problèmes à une dimension (fonction d'une seule variable), il vaut
alors mieux utiliser la méthode de Brent ou bien la fonction optimize().
Méthode BFGS
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 6/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
Le deuxième algorithme proposé est celui de BFGS, avec l'option method = "BFGS". C'est un
algorithme à direction de descente : à partir d'une point de départ, on se déplace sur le plan
tangent à la surface, vers le bas. La direction de descente est l'opposé du gradient de la fonction.
Le pas de descente est fonction l'inverse de la courbure : si la courbure est importante, alors la
surface s'écarte vite du plan tangent, il ne faut donc pas aller trop loin. L'algorithme calcule donc
une approximation de l'inverse de cette dérivée seconde, ou plutôt, dans le cas d'une fonction de
plusieurs variables, de la matrice hessienne (contenant les dérivées partielles d'ordre 2).
On peut fournir la fonction gradient, avec le troisième paramètre gr = … ; sinon, le solveur utilise
une approximation par différences finies. Par exemple
x0 = 0
ou bien
x0 = 0
L'option hessian = TRUE retourne également la matrice hessienne calculée à la solution. On peut
aussi calculer la matrice hessienne par
optimHess(solution$par, f)
Le solveur propose une méthode BFGS modifiée, method = "L-BFGS-B", qui permet de définir
des limites inférieures et supérieures aux variables.
Le troisième algorithme proposé est celui du gradient conjugué, avec l'option method = "CG".
Cette méthode ne calcule pas, et donc ne stocke pas, les matrices hessiennes ; elle permet donc de
traiter des problèmes plus volumineux que la méthode BFGS, mais est moins robuste.
Le quatrième algorithme proposé est celui du recuit simulé (simulated annealing), avec l'option
method = "SANN". Le but de cette méthode est d'éviter de trouver un minimum local. Pour cela,
une fois qu'une solution est trouvée, le solveur repart d'un autre point pour voir s'il converge vers
une autre valeur. Cette méthode est utile lorsqu'il y a de nombreux minima locaux (surface
« rugueuse »).
Méthode de Brent
Le quatrième algorithme proposé est la méthode de Brent, avec l'option method = "Brent". Ce
solveur ne traite que des problèmes à une dimension, et est en fait similaire à la fonction
optimize(). En particulier, il faut définir l'intervalle de recherche avec les options lower = … et
upper = …, mais il faut par contre toujours donner un point de départ.
h(x) ≥ 0
μ×ln(h(x))
où μ est une constante positive. Cette constante vaut par défaut 10<spu>-4, mais peut être
ajustée :
constrOptim(x0, f, NULL, u, c, mu = …)
Une méthode consiste à faire des passes successives en diminuant au fur et à mesure la valeur de μ
pour affiner le résultat, la fonction optimisée étant de plus en plus proche de la fonction initiale.
Régression non-linéaire
Notons tout d'abord qu'une régression linéaire est un modèle dans lequel on recherche des
coefficients (β0, β1, …, βm) ; c'est l'expression de ces coefficients qui doit être linéaire, du type :
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 8/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
où x est un vecteur (x1, x2, …, xn). Les fonctions ƒi ne sont pas nécessairement linéaires.
Un modèle non-linéaire est un modèle dans lequel les coefficients βi figurent eux-même de
manière non-linéaire dans une formule. Par exemple, si l'on recherche un modèle gaussien :
ce modèle n'est pas linéaire en β1 — notons qu'on peut le rendre linéaire en considérant le
logarithme de y.
La régression non-linéaire par la méthode des moindres carrés se fait avec la commande nls()
(nonlinear least squares). Par défaut, cette commande utilise la méthode de Gauss-Newton ; dans
tous les cas, il s'agit d'algorithmes itératifs. La syntaxe de base est similaire à celle de lm(), mais il
faut introduire explicitement les paramètres à affiner dans la formule. Par exemple :
# ********************
# ******************************
print(modele)
plot(u1, u2)
data: donnees
b0 b1
1.975 2.965
La valeur de départ de l'algorithme itératif est choisie automatiquement. On peut lui indiquer des
valeurs de départ avec le paramètre start, qui doit recevoir une liste nommée. par exemple, pour
commencer avec β0 = β1 = 1 :
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 9/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
y = a + bx.
Pour une régression linéaire avec deux variables explicatives, on peut écrire y ~ x1 + x2 ; le
signe plus n'indique pas ici l'addition, mais sépare les deux paramètres, le modèle sera donc
y = a + b1x1 + b1x2.
Attention : les variables du modèle — x, x1, x2, y — doivent être les noms des variables utilisées
dans la structure de données.
Si l'on veut un modèle linéaire sans ordonnée à l'origine, on modifie la formule en ajoutant un
paramètre +0, par exemple y ~ x + 0.
Dans une formule symbolique, le signe plus indique que l'on combine linéairement deux variables.
Si l'on veut appliquer une addition stricte, c'est-à-dire additionner deux termes sans les assortir
d'un coefficient à définir par régression, il faut « inhiber l'interpréteur » avec la fonction I(), par
exemple :
indique un modèle
x2 + y2 = a + b1x + b2y.
Y ~ X Y = β0 + β1X
Y ~ 0 + X Y = β1X
Y ~ X +
Y = β0 + β1X + β2X2
I(X^2)
Y ~ X1 + Y = β0 + β1X1 +
modèle du premier ordre sans interaction croisée
X2 β2X2
Y = β0 + β1X1 + … le point remplace toutes les colonnes des données (data.frame) non
Y ~ .
encore mentionnées dans la formule
Y ~ X1:X2 Y = β0 + β1X1X2 modèle ne contenant que des interactions croisée du premier ordre
Y ~ X1*X2
β2X2 + β3X1X2 équivalent de Y ~ X1 + X2 + X1:X2
Notes et références
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 10/11
28/11/2021 00:53 Programmer en R/Optimiser une fonction — Wikilivres
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Optimiser_une_fonction&oldid=636979 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Optimiser_une_fonction 11/11
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
Notion de matrice
Une matrice est un tableau en deux dimensions dont tous les éléments sont du même type. À
l'instar des vecteurs, il ne s'agit pas ici de la notion algébrique de matrice, mais R dispose tout de
même des opérateurs matriciels classiques. Pour R, un vecteur n'est pas la même chose qu'une
matrice ligne ou colonne.
Une matrice colonne s'obtient avec la commande rbind (row bind, association de lignes) ; une
matrice ligne s'obtient avec la commande cbind (column bind, association de colonnes).
[,1]
[1,] 1
[2,] 2
[3,] 3
> cbind(1, 2, 3)
[1,] 1 2 3
On peut initialiser une matrice avec des éléments tous identiques, avec la commande rep()
(replicate). Par exemple, pour créer des matrices nulles :
[1,] 0 0 0
[,1]
[1,] 0
[2,] 0
[3,] 0
Les matrices sont créées à partir d'un vecteur : les valeurs sont prises une par une pour remplir le
tableau, colonne par colonne.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 1/6
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
Avec la commande rbind(), on associe plusieurs vecteurs, chaque vecteur étant une ligne du
tableau. Avec la commande cbind(), on associe plusieurs vecteurs, chaque vecteur étant une
colonne du tableau.
[1,] 1 2 3
[2,] 4 5 6
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
On utilise également la commande matrix(). L'argument data (1er argument par défaut) est le
vecteur de données, l'argument nrow (2e par défaut) indique le nombre de lignes, et l'argument
ncol (3e par défaut) indique le nombre de colonnes.
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> matrix(1:12, 3, 4)
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
dimnames = NULL)
> a
[,1] [,2]
[1,] 1 2
[2,] 3 4
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 2/6
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
> n1 <- 3
> n2 <- 3
> a
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
De même que pour les vecteurs, les indices vont de 1 à nrow et de 1 à ncol.
> a[2,1]
[1] 3
> a[1,]
[1] 1 2
> a[,1]
[1] 1 3
On peut également, pour les indices, utiliser des vecteurs d'indice, ou bien une matrice booléenne.
[,1] [,2]
[1,] 7 10
[2,] 8 11
> indices
> a[indices]
[1] 6 7 8 9 10 11 12
Enfin, on peut indexer une matrice par un seul indice ; R défile alors les colonnes de haut en bas,
et de gauche à droite :
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 3/6
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
> a
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> a[4]
[1] 4
j <- k%/%nrow(a) + 1
i <- k%%nrow(a)
k = (j - 1)*nrow(a) + i
Il est possible d'additionner +, soustraire -, multiplier * et diviser des matrices /. Toutes ces
opérations sont effectuées entre les coefficients correspondants des matrices. En particulier pour
la multiplication, il ne s'agit pas de la multiplication matricielle telle qu'elle est définie en
mathématiques, comme le montre l'exemple suivant.
Matrice a Matrice b
> a
> b
[1,] 1 3 5
[1,] 5 3 1
[2,] 2 4 6
[2,] 1 4 0
a+b
Addition terme à terme [1,] 6 6 6
[2,] 3 8 6
a-b
Soustraction terme à terme [1,] -4 0 4
[2,] 1 0 6
a*b
[,1] [,2] [,3]
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 4/6
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
[1,] 5 9 5
[2,] 2 16 0
a/b
Division terme à terme [1,] 0.2 1 5
Opérations algébriques
A %*% B
determinant(A)
aperm(A)
Si A et B sont des matrices ligne (mais pas des vecteurs au sens de R), on peut donc calculer le
produit scalaire
A %*% aperm(B)
aperm(A) %*% B
# ou bien
sqrt(aperm(A) %*% A)
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 5/6
28/11/2021 00:53 Programmer en R/Manipuler les matrices — Wikilivres
solve(A)
x = eigen(A)
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Manipuler_les_matrices&oldid=636980 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Manipuler_les_matrices 6/6
28/11/2021 00:54 Programmer en R/Les fonctions statistiques de base — Wikilivres
R dispose de fonctions pour calculer les paramètres descriptifs d'une variable statistique :
,
Attention : les fonctions dans R ne calculent pas directement la
fonction (x, …)
La variable x désigne un vecteur contenant les données que l'on souhaite traiter.
Les données
consistent en des nombres entiers, réels ou complexes, le calcul étant également possible sur des
dates.
Ces fonctions disposent de paramètres dont la description complète est donnée dans la
documentation de R.
Exemples
[1] 4.833333
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_fonctions_statistiques_de_base 1/4
28/11/2021 00:54 Programmer en R/Les fonctions statistiques de base — Wikilivres
[1] 5
[1] 7.766667
> sd (x)
[1] 2.786874
La fonction median() ne peut pas être utilisée sur un data.frame. Pour les autres fonctions, voilà
ce que l'on obtient :
A B
3.5 3.0
A B
A 7.0000000 -0.3333333
B -0.3333333 3.3333333
> sd (df)
A B
2.645751 1.825742
La moyenne a donc été calculée sur chacune des colonnes du data.frame, le résultat est un
vecteur, indexe par le nom des colonnes de df. Si m <- mean(df), on a alors m[1] = m['A'] = 3,5.
La fonction var() calcule la matrice de covariance des colonnes de df. Le résultat est une matrice
dont on accède aux différents coefficients soit par leur numéro de ligne et de colonne, soit par les
index 'A' et 'B'.
Pour l'écart-type, on obtient le vecteur correspondant à l'écart-type de chacune des colonnes de df.
Pour terminer, ces fonctions permettent également des calculs sur des matrices :
> m
[,1] [,2]
[1,] 1 6
[2,] 3 7
[3,] 4 7
[4,] 5 8
[1] 5.125
[1] 5.5
[,1] [,2]
> sd (m)
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_fonctions_statistiques_de_base 2/4
28/11/2021 00:54 Programmer en R/Les fonctions statistiques de base — Wikilivres
La moyenne et la médiane ont été calculées sur l'ensemble des coefficients de la matrice.
La
fonction var() calcule la matrice de covariance, et la fonction sd() calcule le vecteur des écart-
type de chacune des colonne de m.
Le paramètre na.rm est un paramètre qui peut prendre les valeurs TRUE ou FALSE, par défaut sa
valeur est FALSE.
na.rm = TRUE : force le calcul en ne tenant compte que des valeurs présentes ;
na.rm = FALSE : interdit le calcul lorsque des valeurs sont absentes.
> x
[1] 1 6 3 NA 9 6
[1] NA
[1] 5
> m
[,1] [,2]
[1,] 1 6
[2,] 3 NA
[3,] 4 7
[4,] 5 8
[,1] [,2]
[1,] 4.333333 2
[2,] 2.000000 1
Le calcul mean (x) s'est avéré impossible, alors que la commande mean (x, na.rm = TRUE) a
calculé la moyenne des cinq nombres 1, 6, 3, 9, 6. Dans le cas de la matrice m, c'est toute la
deuxième ligne qui a été retirée comme on peut le vérifier :
> m
[,1] [,2]
[1,] 1 6
[2,] 4 7
[3,] 5 8
[,1] [,2]
[1,] 4.333333 2
[2,] 2.000000 1
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_fonctions_statistiques_de_base 3/4
28/11/2021 00:54 Programmer en R/Les fonctions statistiques de base — Wikilivres
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Les_fonctions_statistiques_de_base&oldid=636981 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_fonctions_statistiques_de_base 4/4
28/11/2021 00:54 Programmer en R/Les loi de probabilités, ajustement et test — Wikilivres
Le logiciel R dispose d'une extension (package) dédiée aux statistiques, stats, qui est chargée par
défaut. Il contient les lois statistiques suivantes : lois bêta, binomiale, de Cauchy, χ2 (khi-deux, khi
carré), exponentielle, F de Fisher, gamma, géométrique, hypergéométrique, log-normale,
multinomiale, binomiale négative, normale, de Poisson, t de Student, uniforme, de Weibull, du
paradoxe des dates d'anniversaire, du rang signé de Wilcoxon, de Tukey et de la somme des rangs
de Wilcoxon.
probabilité
répartition
aléatoire
q
d p r
bêta, beta dbeta pbeta qbeta rbeta
binomiale, binom dbinom pbinom qbinom rbinom
de Cauchy, cauchy dcauchy pcauchy qcauchy rcauchy
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_loi_de_probabilités,_ajustement_et_test 1/4
28/11/2021 00:54 Programmer en R/Les loi de probabilités, ajustement et test — Wikilivres
Les paramètres des fonctions dépendent des paramètres des lois. Deux options sont utilisées de
manière générale :
log = TRUE ou log.p = TRUE : la probabilité est exprimée par son logarithme népérien
ln(p) ;
lower.tail = FALSE : la probabilité est exprimée par la probabilité complémentaire 1 – p.
Ces options ne sont illustrées que pour la loi normale. Nous donnons quelques exemples pour des
lois fréquemment utilisées.
Loi normale
Une loi normale admet deux paramètres : l'espérance (ou moyenne, mean) μ (mu) et l'écart type
(standard deviation) σ (sigma). On a donc :
Loi uniforme
Loi binomiale
Une loi binomiale admet deux paramètres : la taille de l'échantillon (size, nombre de tirages) n et
la probabilité de réussite de chaque épreuve, P. On a donc :
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_loi_de_probabilités,_ajustement_et_test 2/4
28/11/2021 00:54 Programmer en R/Les loi de probabilités, ajustement et test — Wikilivres
Loi exponentielle
Loi de Poisson
Loi du khi-carré
Les fonctions sont aussi définies pour les lois non-centrées ; on introduit alors le paramètre de
décentralisation (non-centering parameter) λ : dchisq(x, k, lambda) ou dchisq(x, df = k,
ncp = lambda).
Loi t de Student
Une loi t de Student admet un paramètre : le nombre de degrés de liberté (degree of freedom) k.
On a donc :
Les fonctions sont aussi définies pour les lois non-centrées ; on introduit alors le paramètre de
décentralisation μ : dt(x, k, mu) ou dt(x, df = k, ncp = mu).
Une loi F admet deux paramètres : les degrés de liberté (degrees of freedom) ν1 et ν2 (nu). On a
donc :
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_loi_de_probabilités,_ajustement_et_test 3/4
28/11/2021 00:54 Programmer en R/Les loi de probabilités, ajustement et test — Wikilivres
df(x, nu1, nu2) ou df(x, df1 = nu1, df2 = nu2) : densité de probabilité en x de la loi
F à ν1 et ν2 degrés de liberté ;
…
Les fonctions sont aussi définies pour les lois non-centrées ; on introduit alors le paramètre de
décentralisation λ : df(x, nu1, nu2, lambda) ou df(x, df1 = nu1, df2 = nu2, ncp =
lambda).
Loi de Weibull
Une loi de Weibull admet deux paramètres : le paramètre de forme (shape) β (bêta, parfois noté k)
et le paramètre d'échelle (scale) λ (lambda). On a donc :
Récupérée de « https://fr.wikibooks.org/w/index.php?
title=Programmer_en_R/Les_loi_de_probabilités,_ajustement_et_test&oldid=654478 »
Les textes sont disponibles sous licence Creative Commons attribution partage à l’identique ; d’autres termes
peuvent s’appliquer.
https://fr.wikibooks.org/wiki/Programmer_en_R/Les_loi_de_probabilités,_ajustement_et_test 4/4