Introduction `a R 1 Introduction 2 Création d`objets

Transcription

Introduction `a R 1 Introduction 2 Création d`objets
Master Mathématiques et Applications
Spécialité Statistique
Septembre 2015
Fiche 1
Introduction à R
1
Introduction
Pour utiliser le logiciel R, il faut ouvrir une session de travail. Pour chaque projet, il convient de
créer un fichier texte dans lequel seront sauvegardées les commandes afin de pouvoir les réutiliser
ultérieurement. Une fois la session ouverte, R attend une instruction, ce qu’indique le signe ”>” en
début de ligne. Chaque instruction doit être validée par Entrée pour être exécutée. Si l’instruction
est correcte, R redonne la main, ce qu’indique ”>”. Si l’instruction est incomplète, R retourne le
signe ”+”. Il faut alors compléter l’instruction ou sortir de cette situation et récupérer la main en
tapant Ctrl + c ou Echap. Si l’instruction est erronée, un message d’erreur apparaı̂t.
> 1+2
[1] 3
> 5+ 2
[1] 3
> 1+a
Erreur : objet ’a’ introuvable
La création d’un objet peut se faire par affectation avec un des trois opérateurs “<-”, “->”, “=” en
donnant un nom à cet objet :
> b<-9.09
> x=2015
2
2.1
Création d’objets
Scalaires
– calculs directs :
> 2+3
> 3^2-5*log(100)+sqrt(8)
– création :
> x<-2*cos(-5)
> y<-pi^2
> x*y
[1]
> a<-cos(x*y)
> a
[1]
1
> a<-sqrt(a)
> a
[1]
2.2
Scalaires chaı̂nes
> x<-"il fait"
> x
[1]
> y<-"beau"
> paste(x,y)
[1]
2.3
2.3.1
Vecteurs
Création
Pour construire un vecteur, différentes méthodes sont possibles. Voici les principales :
– Construction par la fonction collecteur c :
> x <- c(5.6,-2,78,42.3)
> x
[1]
> x <- c(x,3,c(12,8))
> x
[1]
– Construction par l’opérateur séquence “ :” :
> 1:6
[1]
– Construction par la fonction seq (séquence régulière) :
> seq(1,6,by=0.5)
[1]
> seq(1,6,length=5)
[1]
– Construction par la fonction rep (réplication) :
> rep(1,4)
[1]
> rep(c(1,2),each=3)
[1]
2.3.2
Extraction
L’extraction s’effectue à partir des indices des éléments du vecteur que l’on souhaite extraire :
> x<-15:25
> x[2]
[1]
> x[2:5]
[1]
> x[c(1,3,5,7)]
[1]
2
2.3.3
Opérations
Les opérations sur les vecteurs s’effectuent élément par élément :
> x<-1:5
> y<-3:7
> x+y
[1]
> x*y
[1]
2.4
2.4.1
Matrices
Création
La principale méthode pour créer une matrice est d’utiliser la fonction matrix qui prend en arguments les coefficients de la matrice ainsi que son nombre de lignes (ou de colonnes) :
> m <- matrix(1:6,ncol=2)
> m
[,1] [,2]
[1,]
[2,]
[3,]
> m <- matrix(1:8,nrow=2)
> m
[,1] [,2] [,3] [,4]
[1,]
[2,]
Par défaut, R range les valeurs par colonne. Pour ranger par ligne, on utilise l’argument byrow :
> m <- matrix(1:8,nrow=2,byrow=T)
> m
[,1] [,2] [,3] [,4]
[1,]
[2,]
2.4.2
Extraction
L’emplacement d’un élément dans une matrice est donné par ses indices de ligne et de colonne :
> m[1,3]
[1]
Il est rare qu’on ait besoin de ne sélectionner qu’un élément d’une matrice. Usuellement, on
sélectionne une ou plusieurs lignes et/ou une ou plusieurs colonnes. Exemples :
– Sélection par des entiers positifs :
> m[2,]
[1]
– Sélection par des entiers négatifs :
3
> m[-1,]
[1]
> m[1:2,-1]
[,1] [,2] [,3]
[1,]
[2,]
2.4.3
Opérations
> m <- matrix(1:4,ncol=2)
> m
[,1] [,2]
[1,]
[2,]
> n <- matrix(3:6,ncol=2,byrow=T)
> n
[,1] [,2]
[1,]
[2,]
> m+n
[,1] [,2]
[1,]
[2,]
> m*n
[,1] [,2]
[1,]
[2,]
> m%*%n
[,1] [,2]
[1,]
[2,]
> exp(m)
Exemples de fonctions classiques en algèbre linéaire :
> det(m)
[1]
> solve(m)
[,1] [,2]
[1,]
[2,]
> eigen(m)
$values
[1]
$vectors
[,1]
[,2]
[1,]
[2,]
4
2.5
Les listes
Les listes permettent de regrouper différents objets. Elles permettent, par exemple, de stocker dans
un même objet un vecteur et une matrice :
> vec<-c(1,2,3)
> mat<-matrix(1,ncol=2,nrow=3)
> L<-list(vec,mat)
> L
[[1]]
[1]
[[2]]
[,1] [,2]
[1,]
[2,]
[3,]
L’objet L ainsi créé est une liste de longueur 2. Le premier élément est le vecteur vec, le second la
matrice mat. On extrait les éléments d’une liste à l’aide de double crochets :
> L[[1]]
[1]
> L[[2]]
[,1] [,2]
[1,]
[2,]
[3,]
Il est également possible, et souvent utile, de donner des noms aux différents éléments d’une liste.
Ceci peut se faire grâce à la fonction names :
> names(L)<-c("vecteur","matrice")
> L
$vecteur
[1]
$matrice
[,1] [,2]
[1,]
[2,]
[3,]
Dans ce cas, l’extraction peut toujours se faire via les doubles crochets ou bien à partir des noms
des différentes composantes, le symbole $ séparant le nom de la liste du nom de la composante :
> L$vecteur
[1]
De nombreuses fonctions de R renvoient un résultat sous la forme d’une liste, c’est le cas par exemple
de la fonction eigen vue dans la partie précédente, donc on liste les éléments via la fonction ls.
Exemple :
5
> m <-matrix(1:4,ncol=2)
> dec<-eigen(m)
> ls(dec)
[1]
> dec$values
[1]
> dec$vectors
[,1]
[,2]
[1,]
[2,]
2.6
Data-frames
Les data-frames sont les objets typiques pour faire des statistiques sous R. Ce sont des listes
particulières dont les composantes sont de même longueur, mais de types éventuellement différents.
Les tableaux de données utilisés en statistique, de forme (individus,variables), doivent être mis sous
la forme d’un data-frame. En effet, un tableau de données est constitué de variables quantitatives
et/ou qualitatives mesurées sur les mêmes individus. Les data-frames permettent de tenir compte
de la nature de chaque variable. Considérons un jeu de données de 6 individus et deux variables :
>
>
>
>
age<-c(17,28,64,8,25,36)
sexe<-c("H","F","F","H","H","F")
donnees<-data.frame(age,sexe)
donnees
age sexe
1
2
3
4
5
6
L’extraction d’éléments peut se faire :
– comme pour une matrice :
> donnees[3,1]
[1]
> donnees[4,]
age sexe
4
> donnees[,2]
[1]
Levels:
– comme pour une liste :
> donnees[[2]]
[1]
Levels:
> donnees$sexe
[1]
Levels:
6
La fonction names permet de retrouver les noms des variables, ce qui peut être utile lorsque le
tableau de données contient beaucoup de variables :
> names(donnees)
[1]
3
3.1
Programmer en R
Les boucles (for ou while)
De manière générale, la boucle for s’écrit :
> for (i in vecteur) {
+
expr1
+
expr2
+
...
+ }
Une autre possibilité de boucle est la condition while. Sa syntaxe générale est la suivante :
> while (condition) {
+
expr1
+
expr2
+
...
+ }
3.2
Les conditions (if, else)
Sous sa forme générale, la condition if, else s’écrit :
> if (condition) {
+
expr1
+
expr2
+
...
+ } else {
+
expr3
+
expr4
+
...
+ }
Attention, l’ordre else doit être sur la même ligne que l’accolade fermante ”}” de la clause if.
3.3
Les fonctions
Une fonction permet d’effectuer un certain nombre d’instructions R, qui dépendent généralement
d’arguments spécifiés en entrée. La fonction fournit un résultat unique, qui est désigné à l’intérieur
de la fonction par return. En l’absence de cette instruction, la fonction renvoit comme résultat le
dernier résultat obtenu dans celle-ci. Donnons un exemple simple, à savoir la somme des n premiers
entiers. Le nombre n est un entier qui est l’argument d’entrée, le résultat est simplement la somme
demandée :
somme <- function(n) {return(sum(1:n))}
7
La fonction est ensuite appelée grâce à son nom (ici, somme), suivi du (ou des) argument(s) en
entrée entre parenthèses. Ainsi :
> somme(3)
[1]
4
Exercices
4.1
Factorielle
1. Programmer factorielle n, c’est-à-dire n! = n × (n − 1) × · · · × 2 × 1 en utilisant prod.
2. Programmer factorielle n en utilisant une boucle for.
3. Comparer à la fonction gamma disponible sous R.
4.2
Création et inversion d’une matrice
1. Créer la matrice mat suivante (avec les noms de lignes et noms de colonnes, on pourra utiliser
les fonctions rownames et colnames, ou encore la fonction dimnames) :
ligne-1
ligne-2
ligne-3
ligne-4
colonne 1 colonne 2 colonne 3 colonne 4
1
5
5
0
0
5
6
1
3
0
3
3
4
4
4
2
2. Calculer le déterminant puis inverser la matrice en utilisant les fonctions appropriées.
3. Stocker la matrice mat, son déterminant et sa matrice inverse dans une liste de trois éléments.
On nommera ces éléments : matrice, determinant et inverse.
4. Retrouver l’inverse en utilisant la fonction ginv du package MASS.
4.3
Diagonalisation
Les matrices suivantes sont-elles diagonalisables ? Si oui, expliciter la diagonalisation.


0 1 1
5 −2
A=
B= 1 0 1 
4 −1
1 1 0
4.4
Sélection et tri dans un data-frame
Le data-frame iris est disponible sous R. Il suffit de taper data(iris) pour le charger.
1. Obtenir un résumé de ce jeu de données grâce à la fonction summary.
2. Déterminer les dimensions de ce jeu de données grâce à la fonction dim.
3. Visualiser ses cinq premières lignes.
4. Créer un nouveau data-frame, que vous appellerez iris2, comportant uniquement les données
de la modalité versicolor de la variable Species.
5. Trier par ordre décroissant les données de iris2 en fonction de la variable Petal.Length
(vous pourrez utiliser la fonction order).
8