Lancement du logiciel r `a l`utes : 1 quelques fonctions

Transcription

Lancement du logiciel r `a l`utes : 1 quelques fonctions
ISUP CS1
TP d’ introduction à R
Le logiciel R est un logiciel libre. Pour télécharger une version du logiciel, il faut passer par CRAN
(Comprehensive R Archive Network ), un réseau mondial de sites qui stockent de manière identique
les différentes versions, les mises à jour, les bibliothèques et la documentation. ( http://cran.fr.
r-project.org/).
Lancement du logiciel R à l’UTES :
– Sous Windows : Dans le menu affiché sur le bureau : Pédagogie → Mathématiques
1. Ouvrir le logiciel R. Le symbole > apparaı̂t indiquant que R est prêt.
2. Créer un nouveau script TP0.R. En effet, comme R ne garde pas la trace de vos calculs,
tous les codes que vous tapez (et qui sont corrects) doivent (si vous voulez les sauvegarder)
être recopiés dans ce fichier (grace à un copier coller). Puis, à la suite de vos codes, copiez
dans ce fichier les réponses de R.
– Sous Linux
1. Dans Outils, ouvrir un terminal. Dans ce terminal, ouvrir le logiciel R : tapez R, puis
appuyez sur la touche Entrée. Le symbole > apparaı̂t indiquant que R est prêt.
2. Dans Outils, ouvrir un deuxième terminal. Dans ce terminal taper : kwrite TP0.R & pour
créer un fichier TP0.R. En effet, comme R ne garde pas la trace de vos calculs, tous les
codes que vous tapez (et qui sont corrects) doivent (si vous voulez les sauvegarder) être
recopiés dans ce fichier (grace à un copier coller). Puis, à la suite de vos codes, copiez dans
ce fichier les réponses de R.
Quelques rappels si vous travaillez sous Linux :
pwd : pour afficher l’adresse du répertoire courant
cd adresse-rep : pour aller dans le répertoire dont d’adresse est adresse-rep
cd .. : pour aller dans le répertoire père du répertoire courant
mkdir nom-rep : pour créer un répertoire de nom nom-rep
kwrite nom-fichier & : pour créer un fichier de nom nom-fichier
Le & sert à ne pas perdre la main. Si vous l’oubliez, pour récupérer la main, taper Ctrl-Z puis
bg.
ls : pour avoir la liste des fichiers contenus dans le répertoire courant
rm fichier : pour détruire fichier
1
Quelques fonctions utiles
–
–
–
–
getwd() permet de connaı̂tre le répertoire dans lequel on travaille.
setwd(’chemin du répertoire’) pour se placer dans un répertoire
source("script.R") exécute un fichier script.
save(monobjet,file="monobjet.Rdata") permet de sauver l’objet monobjet sous le format
R. Il est aussi possible de sauver plusieurs objets dans le même fichier.
Par exemple : save(objet1,objet2,file="mesobjets.Rdata").
– load("mesobjets.Rdata") permet de recharger des objets sauvegardés au cours d’une session
précédente.
– ls() permet de lister les object créés.
Il est possible d’insérer des commentaires dans le programme en les faisant précéder du caractère #.
Pour quitter R, il faut utiliser la commande q(). R pose alors la question : Save workspace image?
[y/n/c]. Si vous répondez y, R sauvegarde tous les objets créés au cours de la session. Si vous répondez
n, ces objets sont perdus. Pour continuer la session, il faut répondre par la lettre c. Au début d’une
session, rm(list=ls()) permet de supprimer tout ce qui a été sauvegardé lors d’une ancienne session.
2
L’aide
Le logiciel R possède un système d’aide. On y accède de plusieurs manières :
– en tapant ? suivi du nom de la fonction
– en tapant help(nomdelafonction).
Dans ces 2 cas R ouvre une fenètre avec les informations relatives à la fonction demandée. Taper la
lettre q pour sortir de cette fenètre.
Il existe également une aide au format html permettant l’utilisation d’un moteur de recherche ; on y
accède en tapant dans R help.start() qui ouvre la page d’accueil de l’aide de R, dans la fenêtre d’un
navigateur interne.
3
Les objects R
Le symbole ’<-’ ou ’=’ est utilisé pour définir un object. On pourra soit taper une commande par ligne,
soit taper plusieurs commandes séparées par le symbole ’;’ sur une même ligne. Une commande peut
s’écrire sur plusieurs lignes, auquel cas R matérialise le début de la 2ème ligne d’instructions par le
symbole ’+’.
Les objets se caractérisent par un type (vecteur, matrice, tableau, liste . . .), un mode (numeric, character : entre guillemets, logical : TRUE ou FALSE), une taille, et un nom.
Remarques :
– Quelque soit le mode, une valeur manquante est représentée par NA.
– R représente correctement les valeurs infinies avec Inf et -Inf :
> 1/0
[1] Inf
– Les valeurs qui ne sont pas des nombres sont représentées avec NaN :
> 0/0
[1] NaN
3.1
3.1.1
Créer des objets
Création d’un vecteur
L’opérateur c() permet de concaténer des valeurs.
> x <- c(2, 6, 5, 8, 1, 3, 9)
Pour afficher le vecteur, taper :
> x
[1] 2 6 5 8 1 3 9
> x1 <- c(10, 11, 1.2)
> x2 <- c(x, x1)
> x2
[1]
2.0
6.0
5.0
8.0
1.0
3.0
9.0 10.0 11.0
1.2
Pour connaı̂tre la longueur d’un vecteur :
> length(x)
[1] 7
On peut créer des vecteurs particuliers grâce à des suites régulières :
> 5:12
[1]
5
6
7
8
9 10 11 12
> rep(1, times = 5)
[1] 1 1 1 1 1
> rep(1:3, times = 5)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
> rep(1:3, each = 2)
[1] 1 1 2 2 3 3
La fonction seq peut générer des suites régulières de nombres de deux manières différentes :
– soit en lui spécifiant, le début, la fin, puis le pas (argument by)
> seq(from = 1, to = 5, by = 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
– soit en lui spécifiant le début, la fin et le nombre d’éléments (argument length)
> seq(from = 1, to = 5, length = 10)
[1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111
[9] 4.555556 5.000000
3.1.2
Création d’une matrice
Pour cela on utilise la fonction matrix. Les options ncol et nrow permettent de définir les dimensions
de la matrice.
> M <- matrix(0, nrow = 2, ncol = 3)
> M
[1,]
[2,]
[,1] [,2] [,3]
0
0
0
0
0
0
> M <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
> M
[1,]
[2,]
[,1] [,2] [,3]
1
3
5
2
4
6
Il existe une option byrow=TRUE qui permet de rentrer les valeurs par lignes et non par colonnes.
> M <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)
> M
[1,]
[2,]
[,1] [,2] [,3]
1
2
3
4
5
6
Pour connaı̂tre les dimensions d’une matrice, on utilise la fonction dim (la fonction length retourne
le nombre d’éléments de la matrice) :
> dim(M)
[1] 2 3
> length(M)
[1] 6
On a la possibilité d’attribuer des noms aux lignes et aux colonnes d’une matrice via l’option dimnames
(ces noms doivent être de type character ).
On peut aussi rajouter des lignes (fonction rbind) ou des colonnes (fonction cbind) à une matrice
existante (voire concaténer des matrices). Voici un exemple :
> cbind(M, c(7, 7))
[1,]
[2,]
[,1] [,2] [,3] [,4]
1
2
3
7
4
5
6
7
> rbind(M, c(8, 8, 8))
[,1] [,2] [,3]
[1,]
1
2
3
[2,]
4
5
6
[3,]
8
8
8
> cbind(M, M)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]
1
2
3
1
2
3
[2,]
4
5
6
4
5
6
Exercice 1 :
1. Entrer la matrice

4 5 6
A= 4 5 6 
4 5 6

2. Définir la matrice B comme étant la matrice A à laquelle on a rajouté la ligne (4, 5, 6).
3. Dimension de B ?
3.1.3
Création d’une liste
Une liste est une collection d’objets (non nécessairement de même type). Une liste est typiquement
obtenue en sortie d’une fonction R ; elle se crée via la fonction list :
> L1 <- list(x2, M, "character")
> L1
[[1]]
[1] 2.0
6.0
5.0
8.0
1.0
3.0
9.0 10.0 11.0
1.2
[[2]]
[,1] [,2] [,3]
[1,]
1
2
3
[2,]
4
5
6
[[3]]
[1] "character"
3.2
Accéder aux données
L’opérateur [ ] permet d’accéder aux éléments d’un object.
Exercice 2 : Quels sont les résultats de ces commandes ?
– pour un vecteur x[2], x[c(2,4)], x[-1]
– pour une matrice M[1,3], M[,1], M[2,]
– pour une liste L1[[2]]
4
Les opérateurs
Voici une liste non exhaustive des opérateurs les plus utilisés.
– opérateurs arithmétiques : +, -, *, /, ^ ...
Exercice 3 :
> x= -10:10
Que fait x^2 ?
– opérateurs de comparaison : ==, <, >, <=, >=, != ...
Exercice 4 :
> x= -10:10
Que fait x==0, x>0, x[x>0], x[x>=0] ?
–
–
–
–
–
5
calcul matriciel :
M%*%N : produit de deux matrices,
t(M) : transposée de M,
solve(M) : matrice inverse de M
solve(A,b) : résout le système linéaire Ax = b,
Exercice 5 : Calculer les produits de matrices : BA, AB, AB’
Variables aléatoires
Il est très utile en statistique de pouvoir générer des variables aléatoires selon diverses lois de probabilité. R peut le faire pour un grand nombre de lois via les fonctions de la forme rfunc(n,arguments)
où func indique la loi de probabilité, n est le nombre de variables à générer et arguments sont les
paramètres de la loi. En voici quelques exemples :
Loi
gaussienne
uniforme
Poisson
exponentielle
Fisher
Fonction R
rnorm(n, mean=0, sd=1)
runif(n, min=0, max=1)
rpois(n,lambda)
rexp(n,rate)
rf(n,df1,df2)
> rnorm(10)
[1] -0.75157644 -2.35565129 -1.33071892 -0.05456767 -0.92848883
[7] -0.28234690 0.66375833 0.28444159 0.51092836
0.40800313
> runif(10)
[1] 0.6077385 0.6691179 0.6525669 0.7625093 0.9917338 0.4953014 0.8260781 0.3139854
[9] 0.3851778 0.2761697
> rexp(10, rate = 2)
[1] 0.41418655 1.37691294 0.55592063 0.13576759 0.26363997 0.05933937 0.44315632
[8] 0.42241813 0.25034389 0.06175019
Les fonctions de la forme rfunc (avec func=norm ou unif...) ont toutes des petites soeurs de la forme
– pfunc(q,arguments) : pour la probabilité cumulée jusqu’à q (i.e fonction de répartition),
– qfunc(p,arguments) : pour le quantile d’ordre p,
– dfunc(x,arguments) : pour la densité de probabilité en x.
Exercice 6 :
1. Soit X une VA de loi normale centrée réduite . Calculer la densité de la VA X en 0.
2. Calculer la probabilié P (X ≤ 0)
6
Graphique
La fonction qui permet de tracer des graphiques est plot.
Exemple : on va utiliser des données disponibles dans R :
voiture=cars
The data give the speed of cars and the distances taken to stop. Note
that the data were recorded in the 1920s.
> voiture = cars
> voiture[1:4, ]
1
2
3
4
speed dist
4
2
4
10
7
4
7
22
> plot(voiture[,1],voiture[,2] )
Options du graphique :
– xlab et ylab pour modifier le nom des axes ; main pour rajouter un titre
– type=’l’ pour relier les points par une ligne (par défaut : nuage de points)
– lty pour jouer sur le type de ligne : par défaut lty=1 donne des lignes continues, mais on peut
obtenir des tirets (lty=2), des pointillés (lty=3)...
– lwd pour jouer sur l’épaisseur des lignes
– col spécifie la couleur
Pour ajouter un nuage de point ou une courbe à un graphique existant (si on utilise plot, le nouveau
graphe efface l’ancien) :
– points(x,y,...) : ajoute un nuage de points,
– lines(x,y,...) : ajoute une nouvelle courbe
Pour tracer 2 graphiques côte à côte sur une même fenêtre, on utilise par(mfrow=c(1,2))
> par(mfrow=c(1,2))
> plot(voiture[,1],voiture[,2], xlab = "Speed", ylab = "Stopping
distance",col="red")
> plot(voiture[,1],voiture[,2], xlab = "Speed", ylab = "Stopping
distance",type='l', lty=3,lwd=3,col="blue")
Note : Pour créer une nouvelle fenêtre graphique vide, taper la commande X11().
Sauvegarde d’une figure dans un fichier pdf :
pdf(file="graphe.pdf")
plot(voiture[,1],voiture[,2])
dev.off()
Exercice 7 : Représenter le graphe de la densité de la loi normale centrèe réduite entre −5 et 5 en
lui faisant calculer 100 points. Rajouter sur le graphique (en rouge), la courbe de densité d’une loi
normale d’espérance 2 et de variance 1. Sauvegarder ce graphe dans le format .pdf.
7
Fonctions mathématiques simples
7.1
Fonctions R prédéfinies
Il existe un nombre très important de fonctions pour manipuler des données. Outre les fonctions
mathématiques de base du type log, exp, cos, abs, sqrt (racine carrée), floor (partie entière) ... en
voici quelques-unes assez courantes :
– sum(x), prod(x) : somme, produit des éléments de x,
– min(x), max(x) : minimum, maximum des éléments de x,
– which.min(x), which.max(x) : indice du min, max des éléments de x,
– sort(x) : trie les éléments de x dans l’ordre croissant,
En voici d’autres à connotation statistique :
– mean(x) : moyenne des éléments de x,
– median(x) : médiane des éléments de x,
– var(x) : variance (divisée par n-1 au lieu de n) des éléments de x,
– cov(x,y) : covariance (divisée par n-1 au lieu de n) entre x et y,
– cor(x,y) : corrélation entre x et y,
– hist(x) : tracer un histogramme...
D’autres fonctions spécifiques existent dans des bibliothèques particulières. Il faut alors appeler cellesci en utilisant la commande library. Par exemple, les fonctions de classification développées par
Rousseeuw et ses collaborateurs sont contenues dans la bibliothèque cluster. Pour les utiliser, il faut
donc appeler cette bibliothèque :
> library(cluster)
Si la bibliothèque appelée n’est pas chargée sur votre machine, R retourne un message d’erreur. Pour
installer un nouveau package, taper sous R :
install.packages("nom_package")
7.2
7.2.1
Ecrire ses propres fonctions R
Structure générale pour une fonction :
Mafonction <- function(arg1,arg2, ...)
{
suite de commandes
sortie = ...
return(sortie)
}
Attention : un seul objet en sortie, mais celui-ci peut être une liste.
Exemple : fonction de (x, y) qui calcule (x + y)2 et retourne son arrondi à 2 chiffres après la virgule :
> MaFonction <- function(x, y) {
+
result <- (x + y)^2
+
sortie <- round(result, 2)
+
return(sortie)
+ }
> MaFonction(4.267, 5.334)
[1] 92.18
7.2.2
Utilisation des boucles
Boucle for :
for (i in vecteur_valeurs) {instructions}
Boucle while :
while (condition)
{instructions}
Boucle test :
if (condition)
{instructions} else {instructions}
Remarque : l’instruction ”sinon” n’est pas obligatoire
Exercice 8 : Ecrire une fonction ma.variance qui calcule l’estimateur de la variance défini par :
n
1 X
(xi − x̄)2
n−1
i=1
n
1X
où x̄ =
xi
n
i=1
pour un vecteur x = (x1 , . . . , xn ) donné en argument.
Comparer avec la fonction prédéfinie var.
Exercice 9 :
1. Ecrire la fonction compte qui prend deux arguments : sequence (un vecteur de caractères)
et lettre (un caractère), et qui retourne le nombre d’occurrences de lettre dans sequence.
Appliquer cette fonction pour trouver le nombre d’occurrences de la lettre ”a” dans la séquence
biologique :
sequence<-c("a","a","t","g","a","g","c","t","a","g","c","t","g")
2. Uiliser une boucle for pour obtenir la composition en (a,c,g,t) de la séquence biologique.