1 + 1[1] 2
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).
Une variable est un objet référencé dans le programme qui associe un identificateur à une valeur d’un certain type.
x=2class(x)[1] "numeric"
## Supprimer x
rm(x)"")x <- "bonjour"
print(x)[1] "bonjour"
Remarque : On peut affecter une valeur à une variable avec le signe =, ou bien avec <-.
class(x)[1] "character"
x <- TRUE
print(x)[1] TRUE
class(x)[1] "logical"
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).
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
Combiner les vecteurs a1 et a2 dans un nouveau vecteur a.
Quelle est la classe du résultat ?
a<-c(a1,a2)
class(a)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”.
a <- c(rep("fille",5),rep("garçon",10))
print(a)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
:1:10 [1] 1 2 3 4 5 6 7 8 9 10
2:7[1] 2 3 4 5 6 7
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
a1[1][1] 1.5
a1[3][1] 3.2
a1[1]+a1[3][1] 4.7
a1[1]/a1[3][1] 0.46875
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
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
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
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
a1 <- c(1,2,3)
a2 <- 1:10
a1+a2Warning 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
sum(a1)[1] 6
mean(a1)[1] 2
Exemple : Décrire la fonction sample
?sampleUne fonction comporte plusieurs arguments. Par exemple sample(x, size, replace = FALSE, prob = NULL)
Parmi les arguments, certains sont obligatoires :
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
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
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
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
sum(x>0)[1] 15
which(x>0) [1] 2 7 8 16 18 21 22 24 26 27 30 32 33 35 39
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
which(x>=5 & x<=10)[1] 8 32 39
x <- c("Nantes","Brest","Rennes","Angers","Le Mans")x[1]x[-1]x[1:3]x[c(2,4)]sort() et rev().rev(sort(x))seq().y <- seq(from=0,to=100,by=2)S <- c(y,seq(from=1,to=100,by=2))length(S)rep() créer un vecteur sonnette contenant 4 fois « ding » puis 4 fois « dong ».sonnette <- c(rep("ding",4),rep("dong",4))sample() créer un vecteur melodie contenant une succession aléatoire de « ding » et de « dong » de taille 100.set.seed(123) # Initialisation de la graine pour les nombres pseudo-aléatoires
melodie <- sample(sonnette,size=100,replace = TRUE)table(), déterminer combien il y a de « ding » et combien il y a de « dong » dans melodie.table(melodie)rnorm().set.seed(999)
x <- rnorm(100,mean=0,sd=1)sum(x)
mean(x)quantile() bien utilisée vous donnera toutes ces informations directement…quantile(x)TRUE) ou non (FALSE). Combien de ces nombres sont-ils positifs ?x>0
sum(x>0)-1<x & x>1
sum(-1 < x & x > 1)which(x<0)abs().abs(x)floor(x)x[which(x>0)]x[which(x<0)] <- rep(0,sum(x<0))
x