1  Découverte de R

Dans la console exécuter les lignes suivantes :

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

A partir de maintenant toutes les commandes seront enregistrées dans un fichier script que vous nommerez TD1.R Pour ce faire : File -> New File -> R Script

La plupart des fonctions mathématiques sont définies dans R (library base)

1.1 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.
x=2
print(x)
[1] 2
mode(x)
[1] "numeric"
## Supprimer x
rm(x)

Les variables contenant des caractères (on utilise ““)

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

Les variables contenant des booléens (vrai ou faux)

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

1.2 Les vecteurs

  • Un des objets de base de R
  • toutes les valeurs de même type (nombre, chaine de caractères, booléen)
  • création via la fonction c() [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)

On peut déterminer la nature du vecteur en utilisant class() :

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)
[1] "character"
  • rep permet d’écrire n fois la valeur a : rep(a,n)

Exercice : créer un vecteur avec 5 fois fille et 10 fois garçon.

rep(5,10)
 [1] 5 5 5 5 5 5 5 5 5 5
rep("fille",10)
 [1] "fille" "fille" "fille" "fille" "fille" "fille" "fille" "fille" "fille"
[10] "fille"
  • seq 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

1.2.1 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 aux vecteurs a1

a1[12]<-10
a1[13]<-11

1.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.

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

1.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] 7
sample(-10:10,3)
[1]  5 -3  4

1.5 Un peu de logique

  1. 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.

  2. 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.

On définit un vecteur

set.seed("44")
x=sample(-20:20,40,T)

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

1.6 Exercices

1.6.1 Exo 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] "Nantes"
  1. Afficher tous les éléments de x sauf le premier
Voir la correction
x[-1]
[1] "Brest"   "Rennes"  "Angers"  "Le Mans"
  1. Afficher les trois premiers éléments de x.
Voir la correction
x[1:3]
[1] "Nantes" "Brest"  "Rennes"
  1. Afficher le deuxième et le quatrième élément de x.
Voir la correction
x[c(2,4)]
[1] "Brest"  "Angers"
  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
sort(x)
[1] "Angers"  "Brest"   "Le Mans" "Nantes"  "Rennes" 
Voir la correction
rev(sort(x))
[1] "Rennes"  "Nantes"  "Le Mans" "Brest"   "Angers" 

1.6.2 Exo 2 :

  1. Créer un vecteur \(y\) contenant les entiers pairs inférieurs à 100 grâce à la fonction seq.
Voir la correction
y<-seq(2,100,by=2)
  1. Ajouter à y les entiers impairs inférieurs à 100. On stockera la valeur obtenue dans une variable \(S\).
Voir la correction
z<-seq(1,100,2)
S<-y+z
  1. Déterminer la taille du vecteur \(S\) final.
Voir la correction
length(x)
[1] 5
  1. A l’aide de la fonction rep créer un vecteur sonnette contenant 4 fois « ding » puis 4 fois « dong ».
Voir la correction
sonette<-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
melodie<-sample(c("ding","dong"),100,replace=T)
  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)
melodie
ding dong 
  51   49 

1.6.3 Exo 3 :

  1. Générer un vecteur \(x\) de taille 100 de valeurs tirées selon une loi normale centrée réduite (ie de paramètre 0 et 1) grâce à la fonction rnorm.
Voir la correction
x<-rnorm(100)
  1. Calculer la somme et la moyenne de x à l’aide des fonctions dédiées.
Voir la correction
sum(x)
[1] 6.836133
Voir la correction
mean(x)
[1] 0.06836133
  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)
        0%        25%        50%        75%       100% 
-1.7635615 -0.4989122 -0.0209831  0.5305801  2.5839972 
  1. Générer le vecteur booléen indiquant si les nombres contenus dans \(x\) sont positifs (TRUE) ou non (FALSE).
Voir la correction
y<-(x>0)
  1. Même question pour indiquer les nombres sont compris entre -1 et 1.
Voir la correction
(x< -1)|(x>1)
  [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
 [13]  TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
 [25]  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
 [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
 [49] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
 [61] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE FALSE  TRUE
 [73] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
 [85] FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE
 [97] FALSE FALSE FALSE FALSE
  1. Afficher les indices des valeurs négatives de x.
Voir la correction
which(x<0)
 [1]  3  4  5  8  9 10 12 16 19 20 21 24 29 30 32 33 37 41 42 43 45 49 50 51 52
[26] 53 54 57 59 61 62 63 64 65 68 70 72 73 76 80 81 82 83 85 86 92 93 94 95 97
[51] 98
  1. Afficher la valeur absolue de \(x\).
Voir la correction
abs(x)
  [1] 1.85574909 0.54117884 0.45518286 0.22270690 0.57108907 0.27666158
  [7] 0.41737962 0.32542423 0.99543585 0.58250681 2.58399725 0.48327788
 [13] 1.51818339 0.55913559 0.20385387 0.30237005 1.76756778 1.75913010
 [19] 1.19442452 1.06333094 1.68238090 0.46061773 0.25167509 0.38374751
 [25] 1.77391253 0.47200392 2.06245528 0.25415520 0.38475149 0.29951813
 [31] 0.63689839 1.21737745 0.66784497 0.28300890 0.53015940 0.90172588
 [37] 0.88977916 0.26542640 0.50075054 0.87440431 0.25863208 0.28193896
 [43] 0.86484487 1.04268008 0.71038537 0.86695391 0.14066352 0.48631277
 [49] 0.03093615 0.20029344 0.69075871 0.13886615 0.94497593 0.93471341
 [55] 1.66707572 0.31637381 0.13833978 0.09110898 0.08448024 0.72501472
 [61] 0.18990729 0.28831530 0.51306150 0.70779990 1.07960193 1.63857250
 [67] 1.62068549 1.50606598 0.61691182 1.76356145 0.78406055 1.67097020
 [73] 0.49419582 1.11009853 0.14399290 0.37416729 0.07630757 0.37620167
 [79] 0.18043558 0.01103006 1.73299653 1.10352414 0.09230857 0.68936825
 [85] 0.57227810 0.30629490 0.04290168 1.78154160 0.53184204 2.37923900
 [91] 0.38853313 1.21706843 0.09963849 0.42988531 0.17272274 0.51102030
 [97] 0.45067615 0.76971246 0.15956416 0.26473857
  1. Afficher la partie entière des valeurs de x.
Voir la correction
floor(x)
  [1]  1  0 -1 -1 -1  0  0 -1 -1 -1  2 -1  1  0  0 -1  1  1 -2 -2 -2  0  0 -1  1
 [26]  0  2  0 -1 -1  0 -2 -1  0  0  0 -1  0  0  0 -1 -1 -1  1 -1  0  0  0 -1 -1
 [51] -1 -1 -1 -1  1  0 -1  0 -1  0 -1 -1 -1 -1 -2  1  1 -2  0 -2  0 -2 -1  1  0
 [76] -1  0  0  0 -1 -2 -2 -1  0 -1 -1  0  1  0  2  0 -2 -1 -1 -1  0 -1 -1  0  0
  1. Afficher uniquement les valeurs positives de x.
Voir la correction
x[x>0]
 [1] 1.85574909 0.54117884 0.27666158 0.41737962 2.58399725 1.51818339
 [7] 0.55913559 0.20385387 1.76756778 1.75913010 0.46061773 0.25167509
[13] 1.77391253 0.47200392 2.06245528 0.25415520 0.63689839 0.28300890
[19] 0.53015940 0.90172588 0.26542640 0.50075054 0.87440431 1.04268008
[25] 0.86695391 0.14066352 0.48631277 1.66707572 0.31637381 0.09110898
[31] 0.72501472 1.63857250 1.62068549 0.61691182 0.78406055 1.11009853
[37] 0.14399290 0.07630757 0.37620167 0.18043558 0.68936825 0.04290168
[43] 1.78154160 0.53184204 2.37923900 0.38853313 0.51102030 0.15956416
[49] 0.26473857
  1. Remplacer les valeurs négatives de x par 0. Vérifier le remplacement.
Voir la correction
x[x>0]<-0
x
  [1]  0.00000000  0.00000000 -0.45518286 -0.22270690 -0.57108907  0.00000000
  [7]  0.00000000 -0.32542423 -0.99543585 -0.58250681  0.00000000 -0.48327788
 [13]  0.00000000  0.00000000  0.00000000 -0.30237005  0.00000000  0.00000000
 [19] -1.19442452 -1.06333094 -1.68238090  0.00000000  0.00000000 -0.38374751
 [25]  0.00000000  0.00000000  0.00000000  0.00000000 -0.38475149 -0.29951813
 [31]  0.00000000 -1.21737745 -0.66784497  0.00000000  0.00000000  0.00000000
 [37] -0.88977916  0.00000000  0.00000000  0.00000000 -0.25863208 -0.28193896
 [43] -0.86484487  0.00000000 -0.71038537  0.00000000  0.00000000  0.00000000
 [49] -0.03093615 -0.20029344 -0.69075871 -0.13886615 -0.94497593 -0.93471341
 [55]  0.00000000  0.00000000 -0.13833978  0.00000000 -0.08448024  0.00000000
 [61] -0.18990729 -0.28831530 -0.51306150 -0.70779990 -1.07960193  0.00000000
 [67]  0.00000000 -1.50606598  0.00000000 -1.76356145  0.00000000 -1.67097020
 [73] -0.49419582  0.00000000  0.00000000 -0.37416729  0.00000000  0.00000000
 [79]  0.00000000 -0.01103006 -1.73299653 -1.10352414 -0.09230857  0.00000000
 [85] -0.57227810 -0.30629490  0.00000000  0.00000000  0.00000000  0.00000000
 [91]  0.00000000 -1.21706843 -0.09963849 -0.42988531 -0.17272274  0.00000000
 [97] -0.45067615 -0.76971246  0.00000000  0.00000000