1. Présentation du langage R▲
Objectifs du chapitre |
---|
|
1-1. Bref historique▲
À l'origine fut le S, un langage pour « programmer avec des données » développé chez Bell Laboratories à partir du milieu des années 1970 par une équipe de chercheurs menée par John M. Chambers. Au fil du temps, le S a connu quatre principales versions communément identifiées par la couleur du livre dans lequel elles étaient présentées : version « originale » (Brown Book ; Becker et Chambers, 1984), version 2 (Blue Book ; Becker et collab., 1988), version 3 (White Book ; Chambers et Hastie, 1992) et version 4 (Green Book ; Chambers, 1998) ; voir aussi Chambers (2000) et Becker (1994) pour plus de détails.
Dès la fin des années 1980 et pendant près de vingt ans, le S a principalement été popularisé par une mise en œuvre commerciale nommée S-PLUS. En 2008, Lucent Technologies a vendu le langage S à Insightful Corporation, ce qui a effectivement stoppé le développement du langage par ses auteurs originaux. Aujourd'hui, le S est commercialisé de manière relativement confidentielle sous le nom Spotfire S+ par TIBCO Software.
Ce qui a fortement contribué à la perte d'influence de S-PLUS, c'est une nouvelle mise en œuvre du langage développée au milieu des années 1990. Inspirés à la fois par le S et par Scheme (un dérivé du Lisp), Ross Ihaka et Robert Gentleman proposent un langage pour l'analyse de données et les graphiques qu'ils nomment R (Ihaka et Gentleman, 1996). À la suggestion de Martin Maechler de l'ETH de Zurich, les auteurs décident d'intégrer leur nouveau langage au projet GNU(1), faisant de R un logiciel libre.
Ainsi disponible gratuitement et ouvert aux contributions de tous, R gagne rapidement en popularité là même où S-PLUS avait acquis ses lettres de noblesse, soit dans les milieux académiques. De simple dérivé « not unlike S », R devient un concurrent sérieux à S-PLUS, puis le surpasse lorsque les efforts de développement se rangent massivement derrière le projet libre. D'ailleurs John Chambers place aujourd'hui ses efforts de réflexion et de développement dans le projet R (Chambers, 2008).
1-2. Description sommaire de R▲
R est un environnement intégré de manipulation de données, de calcul et de préparation de graphiques. Toutefois, ce n'est pas seulement un « autre » environnement statistique (comme SPSS ou SAS, par exemple), mais aussi un langage de programmation complet et autonome.
Tel que mentionné précédemment, le R est un langage principalement inspiré du S et de Scheme (Abelson et collab., 1996). Le S était à son tour inspiré de plusieurs langages, dont l'APL (autrefois un langage très prisé par les actuaires) et le Lisp. Comme tous ces langages, 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.
Cela signifie donc que lorsque l'on programme en R, il n'est pas possible de plaider l'attente de la fin de la phase de compilation pour perdre son temps au travail. Désolé !
Le programme que''on lance lorsque l'on exécute R est en fait l'interprète. Celui-ci attend qu'on lui soumette des commandes dans le langage R, commandes qu'il exécutera immédiatement, une à une et en séquence. Par analogie, Excel est certes un logiciel de manipulation de données, de mise en forme et de préparation de graphiques, mais c'est aussi au sens large un langage de programmation interprété. On utilise le langage de programmation lorsque l'on entre des commandes dans une cellule d'une feuille de calcul. L'interprète exécute les commandes et affiche les résultats dans la cellule.
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. Parmi ses caractéristiques particulièrement intéressantes, on note :
- langage basé sur la notion de vecteur, ce qui simplifie les calculs mathématiques et réduit considérablement le recours aux structures itératives (boucles for, while, etc.) ;
- 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-3. Interfaces▲
R est d'abord et avant tout une application n'offrant qu'une invite de commande du type de celle présentée à la figure 1.1. En soi, cela n'est pas si différent d'un tableur tel que Excel : la zone d'entrée de texte dans une cellule n'est rien d'autre qu'une invite de commande(2), par ailleurs aux capacités d'édition plutôt réduites.
- Sous Windows, une interface graphique plutôt rudimentaire est disponible. Elle facilite certaines opérations telles que l'installation de packages externes, mais elle offre autrement peu de fonctionnalités additionnelles pour l'édition de code R.
- L'interface graphique de R sous Mac OS X est la plus élaborée. Outre la console présentée à la figure 1.1, l'application R.app comporte de nombreuses fonctionnalités, dont un éditeur de code assez complet.
- Sous Unix et Linux, R n'est accessible que depuis la ligne de commande du système d'exploitation (terminal). Aucune interface graphique n'est offerte avec la distribution de base de R.
Peu importe la plateforme utilisée — quoique dans une moindre mesure sous OS X — nous recommandons d'interagir avec R par le biais d'un éditeur de texte pour programmeur ou d'un environnement de développement intégré ; voir la section 1.5Éditeurs de texte et environnements intégrés.
1-4. Stratégies de travail▲
Dans la mesure où R se présente essentiellement sous forme d'une invite de commande, il existe deux grandes stratégies de travail avec cet environnement statistique.
-
On entre des expressions à la ligne de commande pour les évaluer immédiatement :
Sélectionnez>
2
+
3
[
1
]
5
On peut également créer des objets contenant le résultat d'un calcul. Ces objets sont stockés en mémoire dans l'espace de travail de R :
Sélectionnez>
x<-
exp
(2
)>
x[
1
]
7.389056
Lorsque la session de travail est terminée, on sauvegarde une image de l'espace de travail sur le disque dur de l'ordinateur afin de pouvoir conserver les objets pour une future séance de travail :
Sélectionnez>
save.image
()Par défaut, l'image est sauvegardée dans un fichier nommé .RData dans le dossier de travail actif (voir la section 1.7Répertoire de travail) et cette image est automatiquement chargée en mémoire au prochain lancement de R, tel qu'indiqué à la fin du message d'accueil :
Sélectionnez[
Sauvegardede
la session précédente restaurée]
Cette approche, dite de « code virtuel et objets réels » a un gros inconvénient : le code utilisé pour créer les objets n'est pas sauvegardé entre les sessions de travail. Or, celui-ci est souvent bien plus compliqué que l'exemple ci-dessus. De plus, sans accès au code qui a servi à créer l'objet x, comment savoir ce que la valeur
7.389056
représente au juste ? - L'approche dite de « code réel et objets virtuels » considère que ce qu'il importe de conserver d'une session de travail à l'autre n'est pas tant les objets que le code qui a servi à les créer. Ainsi, on sauvegardera dans ce que l'on nommera des fichiers de script nos expressions R et le code de nos fonctions personnelles. Par convention, on donne aux fichiers de script un nom se terminant avec l'extension .R.
Avec cette approche, les objets sont créés au besoin en exécutant le code des fichiers de script. Comment ? Simplement en copiant le code du fichier de script et en le collant dans l'invite de commande de R. La figure 1.2 illustre schématiquement ce que le programmeur R a constamment sous les yeux : d'un côté son fichier de script et de l'autre, l'invite de commande R dans laquelle son code a été exécuté.
La méthode d'apprentissage préconisée dans cet ouvrage suppose que le lecteur utilisera cette seconde approche d'interaction avec R.
1-5. Éditeurs de texte et environnements intégrés▲
Dans la mesure où l'on a recours à des fichiers de script comme expliqué à la section précédente, l'édition de code R est rendue beaucoup plus aisée avec un bon éditeur de texte pour programmeur ou un environnement de développement intégré (integrated development environment, IDE).
- Un éditeur de texte est différent d'un traitement de texte en ce qu'il s'agit d'un logiciel destiné à la création, l'édition et la sauvegarde de fichiers texte purs, c'est-à-dire dépourvus d'information de présentation et de mise en forme. Les applications Bloc-notes sous Windows ou TextEdit sous OS X sont deux exemples d'éditeurs de texte simples.
2.
3.
4.
5.
6.
7.
8.
9.
10.
## Fichier de script simple contenant des expressions R pour
## faire des calculs et créer des objets.
2
+
3
## Probabilité d'une loi de Poisson(10)
x <-
7
10
^
x *
exp
(-
10
) /
factorial
(x)
## Petite fonction qui fait un calcul trivial
f <-
function
(x) x^
2
## Évaluation de la fonction
f(2
)
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
R version
3.2.3
(2015
-
12
-
10
) --
"Wooden Christmas-Tree"
Copyright (C
) 2015
The R Foundation for
Statistical Computing
Platform
:
x86_64-
apple-
darwin13.4.0 (64
-
bit)
[
...]
>
## Fichier de script simple contenant des expressions R pour
>
## faire des calculs et créer des objets.
>
2
+
3
[
1
]
5
>
>
## Probabilité d'une loi de Poisson(10)
>
x <-
7
>
10
^
x *
exp
(-
10
) /
factorial
(x)
[
1
]
0.09007923
>
>
## Petite fonction qui fait un calcul trivial
>
f <-
function
(x) x^
2
>
>
## Évaluation de la fonction
>
f(2
)
[
1
]
4
Fig. 1.2 - Fichier de script (en haut) et invite de commande R dans laquelle les expressions R ont été exécutées (en bas). Les lignes débutant par # dans le fichier de script sont des commentaires ignorés par l'interprète de commandes. |
Toute analogie est boiteuse, mais celle-ci peut néanmoins s'avérer utile pour illustrer l'approche « code réel, objets virtuels ». Avec un tableur comme Excel, que choisiriez-vous si l'on vous proposait les options suivantes :
- Ne sauvegarder que les valeurs calculées d'une feuille de calcul ;
- Ne sauvegarder que les formules d'une feuille de calcul, quitte à les réévaluer par la suite pour obtenir les valeurs correspondantes.
La seconde, sûrement… Or, sauvegarder l'espace de travail R dans un fichier .RData (l'approche « objets réels, code virtuel ») correspond à la première option, alors que sauvegarder le code source des fichiers de script correspond à la seconde.
Là où l'analogie est boiteuse, la raison pour laquelle on n'a jamais à se poser la question avec un tableur, c'est que le progiciel évalue constamment et en temps réel les formules pour afficher les résultats dans les cellules.
- Un éditeur de texte pour programmeur saura en plus reconnaître la syntaxe d'un langage de programmation et assister à sa mise en forme : indentation automatique du code, marquage des mots-clés, manipulation d'objets, etc.
-
Un éditeur compatible avec R réduira, entre autres, l'opération de copier-coller à un simple raccourci clavier.
Le lecteur peut utiliser le logiciel de son choix pour l'édition de code R. Certains offrent simplement plus de fonctionnalités que d'autres.
-
Dans la catégorie des éditeurs de texte, nous recommandons le vénérable et très puissant éditeur pour programmeur GNU Emacs. À la question 6.2 de la foire aux questions de R (Hornik, 2013), « Devrais-je utiliser R à l'intérieur de Emacs ? », la réponse est : « Oui, absolument ».
En effet, combiné avec le mode ESS (Emacs Speaks Statistics), Emacs offre un environnement de développement aussi riche qu'efficace. Entre autres fonctionnalités uniques à cet éditeur, le fichier de script et l'invite de commandes R sont regroupés dans la même fenêtre, comme on peut le voir à la figure 1.3.
Emblème du logiciel libre, Emacs est disponible gratuitement et à l'identique sur toutes les plateformes supportées par R, dont Windows, OS X et Linux.
Consulter l'annexe AGNU Emacs et ESS : la base pour en savoir plus sur GNU Emacs et apprendre les commandes essentielles pour y faire ses premiers pas.
-
Emacs est toutefois un logiciel difficile à apprivoiser, surtout pour les personnes moins à l'aise avec l'informatique.
-
RStudio est un environnement de développement intégré (IDE) créé spécifiquement pour travailler avec R. Sa popularité connaît une progression foudroyante depuis 2014. Il permet de consulter dans une interface conviviale ses fichiers de script, la ligne de commande R, les rubriques d'aide, les graphiques, etc. ; voir la figure 1.4.
RStudio est disponible sur les plateformes Windows, OS X et Linux. -
Il existe plusieurs autres options pour éditer efficacement du code R — et le Bloc-notes de Windows n'en fait pas partie ! Nous recommandons plutôt :
- sous Windows, l'éditeur Notepad++ additionné de l'extension NppToR (Redd, 2010), tous deux des logiciels libres, ou le partagiciel WinEdt muni de l'extension libre R-WinEdt (Ligges, 2003) ;
- sous OS X, tout simplement l'éditeur de texte très complet intégré à l'application R.app, ou alors l'éditeur de texte commercial TextMate (essai gratuit de 30 jours) ;
- sous Linux, Vim et Kate semblent les choix les plus populaires dans la communauté R, après Emacs et RStudio.
1-6. Anatomie d'une session de travail▲
Dans ses grandes lignes, une session de travail avec R réunit les étapes ci-dessous.
- Démarrer une session R en cliquant sur l'icône de l'application si l'on utilise une interface graphique ou RStudio, ou alors en suivant la procédure appropriée pour travailler avec son éditeur de texte.
- Ouvrir un fichier de script existant ou en créer un nouveau à l'aide de l'éditeur de texte de son choix.
- Bâtir graduellement un fichier de script en y consignant le code R que l'on souhaite sauvegarder et les commentaires qui permettront de s'y retrouver plus tard. Tester les commandes à la ligne de commande. Au cours de la phase de développement, on fera généralement de nombreux allers-retours entre la ligne de commande et le fichier de script.
- Sauvegarder son fichier de script et quitter l'éditeur ou l'environnement de développement.
- Si nécessaire — et c'est rarement le cas — sauvegarder l'espace de travail de la session R avec
save.image
(). En fait, on ne voudra sauvegarder nos objets R que lorsque ceux-ci sont très longs à créer, par exemple, les résultats d'une simulation. - Quitter R en tapant
q
() à la ligne de commande ou en fermant l'interface graphique par la procédure usuelle. Encore ici, la manière de procéder est quelque peu différente dans GNU Emacs ; voir l'annexe AGNU Emacs et ESS : la base.
Les étapes 1 et 2 sont interchangeables, tout comme les étapes 4, 5 et 6.
L'annexe AGNU Emacs et ESS : la base explique plus en détail la procédure à suivre lorsque l'on utilise GNU Emacs. L'annexe BRStudio : une introduction fait de même lorsque l'on utilise l'environnement intégré RStudio.
1-7. Répertoire de travail▲
Le répertoire de travail (workspace) de R est le dossier par défaut dans lequel le logiciel : 1) va rechercher des fichiers de script ou de données ; et 2) va sauvegarder l'espace de travail dans le fichier .RData. Le répertoire de travail est déterminé au lancement de R.
- Les interfaces graphiques de R démarrent avec un répertoire de travail par défaut. Pour le changer, utiliser l'entrée appropriée dans le menu Fichier (Windows) ou Divers (OS X). Consulter aussi les foires aux questions spécifiques aux interfaces graphiques (Ripley et Murdoch, 2013 ; Iacus et collab., 2013) pour des détails additionnels sur la gestion des répertoires de travail.
- Dans RStudio, on change le répertoire de travail via le menu Session.
- Avec GNU Emacs, la situation est un peu plus simple puisque l'on doit spécifier un répertoire de travail chaque fois que l'on démarre un processus R ; voir l'annexe AGNU Emacs et ESS : la base.
1-8. Consulter l'aide en ligne▲
Les rubriques d'aide des diverses fonctions de R contiennent une foule d'informations ainsi que des exemples d'utilisation. Leur consultation est tout à fait essentielle.
- Pour consulter la rubrique d'aide de la fonction foo, on peut entrer à la ligne de commande
>
?foo
ou
>
help
(foo)
1-9. Où trouver de la documentation▲
La documentation officielle de R se compose de six guides accessibles depuis le menu Aide des interfaces graphiques ou encore en ligne dans le site du projet R(3). Pour le débutant, seuls An Introduction to R et, possiblement, R Data Import/Export peuvent s'avérer des ressources utiles à court terme.
Plusieurs livres — en versions papier ou électronique, gratuits ou non — ont été publiés sur R. On en trouvera une liste exhaustive dans la section Documentation du site du projet R.
Depuis plusieurs années maintenant, les ouvrages de Venables et Ripley (2000, 2002) demeurent des références standards de facto sur les langages S et R. Plus récent, Braun et Murdoch (2007) participe du même effort que le présent ouvrage en se concentrant sur la programmation en R plutôt que sur ses applications statistiques.
1-10. Exemples▲
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
### Générer deux vecteurs de nombres pseudo-aléatoires issus
### d'une loi normale centrée réduite.
x <-
rnorm
(50
)
y <-
rnorm
(x)
### Graphique des couples (x, y).
plot
(x, y)
### Graphique d'une approximation de la densité du vecteur x.
plot
(density
(x))
### Générer la suite 1, 2, ... , 10.
1
:
10
### La fonction 'seq' sert à générer des suites plus générales.
seq
(from =
-
5
, to =
10
, by
=
3
)
seq
(from =
-
5
, length
=
10
)
### La fonction 'rep' sert à répéter des valeurs.
rep
(1
, 5
) # répéter 1 cinq fois
rep
(1
:
5
, 5
) # répéter le vecteur 1, ... ,5 cinq fois
rep
(1
:
5
, each =
5
) # répéter chaque élément du vecteur cinq fois
### Arithmétique vectorielle.
v <-
1
:
12
# initialisation d'un vecteur
v +
2
# additionner 2 à chaque élément de v
v *
-
12
:-
1
# produit élément par élément
v +
1
:
3
# le vecteur le plus court est recyclé
### Vecteur de nombres uniformes sur l'intervalle [1, 10].
v <-
runif
(12
, min
=
1
, max
=
10
)
v
### Pour afficher le résultat d'une affectation, placer la
### commande entre parenthèses.
( v <-
runif
(12
, min
=
1
, max
=
10
) )
### Arrondi des valeurs de v à l'entier près.
( v <-
round
(v) )
### Créer une matrice 3 x 4 à partir des valeurs de
### v. Remarquer que la matrice est remplie par colonne.
( m <-
matrix
(v, nrow
=
3
, ncol
=
4
) )
### Les opérateurs arithmétiques de base s'appliquent aux
### matrices comme aux vecteurs.
m +
2
m *
3
m ^
2
### Éliminer la quatrième colonne afin d'obtenir une matrice
### carrée.
( m <-
m[
,-
4
]
)
### Transposée et inverse de la matrice m.
t
(m)
solve
(m)
### Produit matriciel.
m %*%
m # produit de m avec elle-même
m %*%
solve
(m) # produit de m avec son inverse
round
(m %*%
solve
(m)) # l'arrondi donne la matrice identité
### Consulter la rubrique d'aide de la fonction 'solve'.
?solve
### Liste des objets dans l'espace de travail.
ls
()
### Nettoyage.
rm
(x, y, v, m)
1-11. Exercices▲
1.1 Démarrer une session R et entrer une à une les expressions ci-dessous à la ligne de commande. Observer les résultats.
2.
3.
4.
5.
6.
7.
8.
>
ls
()
>
pi
>
(v <-
c
(1
, 5
, 8
))
>
v *
2
>
x <-
v +
c
(2
, 1
, 7
)
>
x
>
ls
()
>
q
()
1.2 Ouvrir dans un éditeur de texte le fichier de script contenant le code de la section précédente. Exécuter le code ligne par ligne et observer les résultats. Répéter l'exercice avec un ou deux autres éditeurs de texte afin de les comparer et de vous permettre d'en choisir un pour la suite.
1.3 Consulter les rubriques d'aide d'une ou plusieurs des fonctions rencontrées lors de l'exercice précédent. Observer d'abord comment les rubriques d'aide sont structurées — elles sont toutes identiques — puis exécuter quelques expressions tirées des sections d'exemples.
1.4 Exécuter le code de l'exemple de session de travail R que l'on trouve à l'annexe A de Venables et collab. (2013). En plus d'aider à se familiariser avec R, cet exercice permet de découvrir les fonctionnalités du logiciel en tant qu'outil statistique.