TD1 : Premiers pas dans R

1 Premières commandes

Dans la console exécuter les lignes suivantes :

1 + 1
[1] 2
pi
[1] 3.141593
sin(3*pi/2)
[1] -1

A partir de maintenant toutes les commandes seront enregistrées dans un fichier script nommé TD1.R.

Pour ce faire : File -> New File -> R Script

La plupart des fonctions mathématiques sont définies dans R (librairie base, chargée automatiquement).

2 Les variables

Une variable est un objet référencé dans le programme qui associe un identificateur à une valeur d’un certain type.

  • L’identificateur est le nom de la variable utilisé pour l’appeler,
  • La valeur est ce que contient la variable,
  • Le type est l’ensemble dans lequel la variable prend sa valeur.

2.1 Variables de type numérique

x=2
class(x)
[1] "numeric"
## Supprimer x
rm(x)

2.2 Variables contenant des caractères (on utilise "")

x <- "bonjour"
print(x)
[1] "bonjour"

Remarque : On peut affecter une valeur à une variable avec le signe =, ou bien avec <-.

class(x)
[1] "character"

2.3 Variables contenant des booléens (Vrai ou Faux)

x <- TRUE
print(x)
[1] TRUE
class(x)
[1] "logical"

3 Les vecteurs

Il s’agit d’un des objets de base de R, contenant plusieurs valeurs d’un même type (numérique, chaîne de caractères, booléen).

3.1 Création d’un vecteur

  • Via la fonction c() (pour combine).
a1 <- c(1.5,2,3.2,-1.5,0,-1)
a2 <- c("fille","garçon","fille","fille","fille","fille")
a3 <- c(TRUE,FALSE,TRUE,TRUE)
class(a1)
[1] "numeric"
class(a2)
[1] "character"
class(a3)
[1] "logical"

Exercice

  1. Combiner les vecteurs a1 et a2 dans un nouveau vecteur a.

  2. Quelle est la classe du résultat ?

Voir la correction
a<-c(a1,a2)
class(a)
  • Via la fonction rep(), qui permet d’écrire n fois la valeur a : rep(a,n)
rep(5,10)
 [1] 5 5 5 5 5 5 5 5 5 5

Exercice

Créer un vecteur avec 5 fois “fille” et 10 fois “garçon”.

Voir la correction
a <- c(rep("fille",5),rep("garçon",10))
print(a)
  • Via la fonction seq(), qui définit une séquence de nombre entre MIN et MAX avec un pas de L : seq(MIN,MAX,by=L)
seq(0,1,by=0.1)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
seq(10,20,by=5)
[1] 10 15 20
  • On peut aussi créer des vecteurs d’entiers successifs avec :
1:10
 [1]  1  2  3  4  5  6  7  8  9 10
2:7
[1] 2 3 4 5 6 7

3.2 Indexation et longueur d’un vecteur

  • La fonction length() permet de calculer le nombre de valeurs d’un vecteur (quelle que soit la nature du vecteur considéré).
length(a1)
[1] 6
length(a2)
[1] 6
  • Chaque élément d’un vecteur est repéré par un indice entre [].
a1[1]
[1] 1.5
a1[3]
[1] 3.2
  • Opérations sur les éléments d’un vecteur :
a1[1]+a1[3]
[1] 4.7
a1[1]/a1[3]
[1] 0.46875
  • On peut changer la valeur de a1[3] en lui affectant une nouvelle valeur :
a1[3] <- -3
a1
[1]  1.5  2.0 -3.0 -1.5  0.0 -1.0
  • On peut aussi ajouter de nouvelles valeurs au vecteur.
a1[12]<-10
a1[13]<-11
a1
 [1]  1.5  2.0 -3.0 -1.5  0.0 -1.0   NA   NA   NA   NA   NA 10.0 11.0
  • On peut effectuer les opérations précédentes sur plusieurs valeurs du vecteur.
a1[c(12,13)] <- c(99,100)
a1
 [1]   1.5   2.0  -3.0  -1.5   0.0  -1.0    NA    NA    NA    NA    NA  99.0
[13] 100.0
a1[7:11] <- 94:98
a1
 [1]   1.5   2.0  -3.0  -1.5   0.0  -1.0  94.0  95.0  96.0  97.0  98.0  99.0
[13] 100.0

3.3 Les calculs de base avec un vecteur

  • On peut ajouter, soustraire, multiplier des vecteurs entre eux à condition qu’ils soient de même longeur et qu’ils soient numériques.

Les opérations sont alors effectuées terme à terme.

a1 <- seq(10,20,by=1)
a2 <- seq(20,30,by=1)
a1+a2
 [1] 30 32 34 36 38 40 42 44 46 48 50
a2-a1
 [1] 10 10 10 10 10 10 10 10 10 10 10
a1*a2
 [1] 200 231 264 299 336 375 416 459 504 551 600
a2/a1
 [1] 2.000000 1.909091 1.833333 1.769231 1.714286 1.666667 1.625000 1.588235
 [9] 1.555556 1.526316 1.500000
a1^2*log(a2)
 [1]  299.5732  368.3872  445.1101  529.8985  622.8986  724.2471  834.0727
 [8]  952.4969 1079.6343 1215.5938 1360.4790
  • Attention : si les vecteurs ne sont pas de la même longueur, les éléments du vecteur le plus court sont recyclés.
a1 <- c(1,2,3)
a2 <- 1:10
a1+a2
Warning in a1 + a2: la taille d'un objet plus long n'est pas multiple de la
taille d'un objet plus court
 [1]  2  4  6  5  7  9  8 10 12 11
  • On peut calculer la somme ou la moyenne des éléments d’un vecteur.
sum(a1)
[1] 6
mean(a1)
[1] 2

4 Ouvrir l’aide

  • Toutes les fonctions prédéfinies dans R possèdent une vignette (description des arguments de la fonction, des sorties et un exemple utilisant la fonction). Pour accéder à cette aide on met un point d’interrogation devant le nom de la fonction.

Exemple : Décrire la fonction sample

?sample
  • Une fonction comporte plusieurs arguments. Par exemple sample(x, size, replace = FALSE, prob = NULL)

  • Parmi les arguments, certains sont obligatoires :

    • x est un vecteur dans lequel on va choisir des valeurs au hasard;
    • size est la taille du résultat.
  • D’autres sont facultatifs (ils ont des valeurs par défaut), ici replace et prob.

sample(-10:10,1)
[1] 5
sample(-10:10,3)
[1] 10 -2  6

5 Un peu de logique

  • L’opérateur | correspond à OU : A | B est faux lorsque les deux événements A et B sont faux simultanément et est vrai dans tous les autres cas.

  • l’opérateur & correspond à ET : A & B est vrai uniquement lorsque les deux événements A et B sont vrais et est faux dans tous les autres cas.

Exemple

  • On définit un vecteur x:
set.seed("44")
# Permet de fixer la "graine", qui génère les nombres pseudo-aléatoires.
x=sample(-20:20,40,replace=TRUE)
x
 [1]  -4  12  -4 -16 -20 -12  13   9 -15 -13 -20 -20   0 -15  -1  18  -7  19  -7
[20]   0   1  13 -14  16 -14  16  19 -20 -15  17  -4   7  20 -16  11  -8 -19 -19
[39]   6  -7
  • On veut savoir quelles valeurs de x sont positives :
x>0
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE
[25] FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE
[37] FALSE FALSE  TRUE FALSE
  • On veut savoir combien de valeurs de x sont postives:
sum(x>0)
[1] 15
  • Quelles sont les positions de ces valeurs ?
which(x>0)
 [1]  2  7  8 16 18 21 22 24 26 27 30 32 33 35 39
  • Quels sont les indices des valeurs supérieure à 5 ou inférieure à 0 ?
which(x>5 | x<0)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 14 15 16 17 18 19 22 23 24 25 26 27 28
[26] 29 30 31 32 33 34 35 36 37 38 39 40
  • Quels sont les indices des valeurs dans [5,10] ?
which(x>=5 & x<=10)
[1]  8 32 39

6 Exercices

6.1 Exercice 1

  1. Créer le vecteur x contenant le nom des villes suivantes Nantes, Brest, Rennes, Angers, Le Mans.
Voir la correction
x <- c("Nantes","Brest","Rennes","Angers","Le Mans")
  1. Afficher le premier élément de x.
Voir la correction
x[1]
  1. Afficher tous les éléments de x sauf le premier.
Voir la correction
x[-1]
  1. Afficher les trois premiers éléments de x.
Voir la correction
x[1:3]
  1. Afficher le deuxième et le quatrième élément de x.
Voir la correction
x[c(2,4)]
  1. Classer les éléments de x dans l’ordre alphabétique puis anti-alphabétique grâce aux fonctions sort() et rev().
Voir la correction
rev(sort(x))

6.2 Exercice 2

  1. Créer un vecteur y contenant les entiers pairs inférieurs à 100 grâce à la fonction seq().
Voir la correction
y <- seq(from=0,to=100,by=2)
  1. Ajouter à y les entiers impairs inférieurs à 100. On stockera la valeur obtenue dans une variable S.
Voir la correction
S <- c(y,seq(from=1,to=100,by=2))
  1. Déterminer la taille du vecteur S final.
Voir la correction
length(S)
  1. A l’aide de la fonction rep() créer un vecteur sonnette contenant 4 fois « ding » puis 4 fois « dong ».
Voir la correction
sonnette <- c(rep("ding",4),rep("dong",4))
  1. A l’aide de la fonction sample() créer un vecteur melodie contenant une succession aléatoire de « ding » et de « dong » de taille 100.
Voir la correction
set.seed(123) # Initialisation de la graine pour les nombres pseudo-aléatoires
melodie <- sample(sonnette,size=100,replace = TRUE)
  1. Grâce à la fonction table(), déterminer combien il y a de « ding » et combien il y a de « dong » dans melodie.
Voir la correction
table(melodie)

6.3 Exercice 3

  1. Générer un vecteur x de taille 100 de valeurs tirées selon une loi normale centrée réduite (i.e. de paramètres 0 et 1) grâce à la fonction rnorm().
Voir la correction
set.seed(999)
x <- rnorm(100,mean=0,sd=1)
  1. Calculer la somme et la moyenne de x à l’aide des fonctions dédiées.
Voir la correction
sum(x)
mean(x)
  1. Calculer le minimum, le premier quartile, la médiane, le troisième quartile et le maximum de x. La fonction quantile() bien utilisée vous donnera toutes ces informations directement…
Voir la correction
quantile(x)
  1. Générer le vecteur booléen indiquant si les nombres contenus dans x sont positifs (TRUE) ou non (FALSE). Combien de ces nombres sont-ils positifs ?
Voir la correction
x>0
sum(x>0)
  1. Même question pour indiquer si les nombres sont compris entre -1 et 1.
Voir la correction
-1<x & x>1
sum(-1 < x & x > 1)
  1. Afficher les indices des valeurs négatives de x.
Voir la correction
which(x<0)
  1. Afficher la valeur absolue des valeurs de x avec la fonction abs().
Voir la correction
abs(x)
  1. Afficher la partie entière des valeurs de x .
Voir la correction
floor(x)
  1. Afficher uniquement les valeurs positives de x.
Voir la correction
x[which(x>0)]
  1. Remplacer les valeurs négatives de x par 0. Vérifier le remplacement.
Voir la correction
x[which(x<0)] <- rep(0,sum(x<0))
x