R1 Intro PDF
R1 Intro PDF
R1 Intro PDF
Bases du langage
2.1 Commandes
## [1] -1
Affectations et expressions
x <- 1+2 # ou x=1+2
x
## [1] 3
y = 4
x == y
## [1] FALSE
A l’aide de ; on peut taper deux commandes sur la même ligne avant leur exécution :
e <- exp(1); log(e)
## [1] 1
Quelques exemples d’opérateurs arithmétiques et booléens :
3*4; 12/3; 2^3; sqrt(16)
## [1] 12
## [1] 4
## [1] 8
## [1] 4
1==2; 1!=1
## [1] FALSE
## [1] FALSE
FALSE & TRUE # et
## [1] FALSE
FALSE | TRUE # ou
## [1] TRUE
Dans R, tout est un objet. Le mode spécifie ce qu’un objet peut contenir. Les modes principaux sont :
— numeric : nombres réels
— character : chaînes de caractères
— logical : valeurs logiques vrai/faux
— list : liste, collection d’objets
3
— function : fonction
Les objets de mode numeric, character et logical, sont des objets simples qui peuvent contenir des données
d’un seul type. Au contraire, les objets de mode list sont des objets spéciaux qui peuvent contenir d’autres
objets.
On peut accéder au mode d’un objet avec la fonction mode() :
age=c(33,28, 33) # La fonction de concatenation c() permet de créer des vecteurs
mode(age)
## [1] "numeric"
noms <- c('Daniel', 'Jehanne', 'Romain')
mode(noms)
## [1] "character"
ma.liste <- list(noms=noms, age=age)
mode(ma.liste)
## [1] "list"
mode(is.integer(pi))
## [1] "logical"
mode(mode)
## [1] "function"
A part le mode, un objet a aussi une longueur, définie comme le nombre d’éléments qu’il contient :
length(age)
## [1] 3
length(noms)
## [1] 3
length(ma.liste)
## [1] 2
La classe d’un objet spécifie son comportement et donc sa façon d’interagir avec opérations et fonctions. Un
exemple important sont les data frame : des liste spéciales dont les éléments ont tous la même longueur. La
classe d’un data frame est différente de celle des listes génériques et les data frame ont un système d’indiçage
qui n’existe pas pour les autres listes :
class(ma.liste)
## [1] "list"
mon.data.frame=data.frame(noms,age)
mode(mon.data.frame)
## [1] "list"
class(mon.data.frame)
## [1] "data.frame"
mon.data.frame[1,2] # pour extraire le 1e élément de la 2ème "colonne""
4
## [1] 33
# Essayer la commande suivante:
# ma.liste[1,2]
Un objet spécial est la valeur manquante NA. Par défaut, son mode est logical, cependant NA n’est ni TRUE
ni FALSE. Pour tester si une valeur est manquante on utilisera la fonction is.na() :
NA==NA
## [1] NA
is.na(NA)
## [1] TRUE
is.na(mean(c(1,4,NA)))
## [1] TRUE
5
2.3 Vecteurs et matrices
2.3.1 Vecteurs
En R l’unité de base dans les calculs est le vecteur (un scalaire est considéré comme un vecteur de longueur
un). La fonction la plus utilisée pour créer un vecteur est la concaténation :
prix <- c(150, 162, 155, 157); prix
## [1] 150
prix[c(1,3)]
## [1] 2 4
prix[which(prix>156)]
## NULL
names(prix) <- c('model.1', 'model.2', 'model.3', 'model.4')
prix
6
## 0 162 155 157
prix['model.3']
## model.3
## 155
Dans un vecteur, tous les éléments doivent avoir le même mode :
x <- c(1,2,'a', 'b'); x
## [1] "character"
Pour générer le vecteur des n premiers entiers on utilise la syntaxe 1:n
1:10
## [1] 1 2 3 4 5 6 7 8 9 10
2:6
## [1] 2 3 4 5 6
Pour générer des suites plus générales on utilise la fonction seq() :
seq(from=2, to=20, by=2) # ou plus simplement seq(2,20,2)
## [1] 2 4 6 8 10 12 14 16 18 20
On peut créer un vecteur d’éléments répétés avec rep() :
rep(1,len=3) # même chôse que rep(1,3)
## [1] 1 1 1
rep(NA,4)
## [1] NA NA NA NA
2.3.2 Matrices
Une matrice est un vecteur avec un attribut dim de longueur deux. Tous les élément d’une matrice ont donc
le même mode. Pour créer une matrice :
M <- matrix(2:7, nrow=2, ncol=3); M
## [1] 3 5 7
7
M[,3] # 3e colonne
## [1] 6 7
M[2,3]
## [1] 7
M[3]
## [1] 4
M[,-2] # pour extraire toutes les colonnes sauf la 2e
## [,1] [,2]
## [1,] 2 6
## [2,] 3 7
Pour fusionner verticalement (horizontalement) deux matrices on utilise rbind() (resp. cbind()) :
cbind(M,-M)
## [1] 5 6 3 8
v * 2
## [1] 6 8 2 12
v * v
## [1] 9 16 1 36
v/2
## [1] 1 1 1 1
v + v^2
## [1] 12 20 2 42
8
sqrt(M)
## [,1] [,2]
## [1,] 2 3
## [2,] 4 5
## [3,] 6 7
N <- M[,-3]
N %*% diag(1,2)
## [,1] [,2]
## [1,] 2 4
## [2,] 3 5
# diag(1,2) construit la matrice diagonale de dimension 2x2 dont tous les
# éléments de la diagonale sont égaux à 1
solve(N)
## [,1] [,2]
## [1,] -2.5 2
## [2,] 1.5 -1
solve(N) %*% N
## [,1] [,2]
## [1,] 1 1.776357e-15
## [2,] 0 1.000000e+00
Le transposé d’un vecteur est une matrice-ligne :
V <- t(v)
dim(V)
## [1] 1 4
t(V)
## [,1]
## [1,] 3
## [2,] 4
## [3,] 1
## [4,] 6
Faire attention aux exemples suivants :
9
v %*% t(v) # v est consideré comme un vecteur-colonne!
## [,1]
## [1,] 62
v %*% v # v est consideré un vecteur-ligne et un vecteur-colonne
## [,1]
## [1,] 62
2.4 Facteurs
Un facteur est un vecteur utilisé pour contenir une variable qualitative, c’est à dire une variable à valeurs
discrètes. Ses valeurs, ou catégories ou encore modalités, sont appelées les levels en R.
ville <- c('paris', 'lyon', 'lyon', 'paris', 'nantes')
fact.ville <- as.factor(ville); fact.ville
## [1] "factor"
levels(fact.ville)
## [1] "numeric"
as.numeric(fact.ville)
## [1] 3 1 1 3 2
10
2.5 Listes
Les listes sont des vecteurs spéciaux qui peuvent stocker des éléments de n’importe quelle mode (y comprises
d’autres listes).
Comme tout autre vecteur, une liste est indicée par l’opérateur [ ]. Cependant, cela retourne une liste
contenant l’élément souhaité :
ma.liste[1]
## $noms
## [1] "Daniel" "Jehanne" "Romain"
mode(ma.liste[1])
## [1] "list"
Pour obtenir directement l’élément, on utilise donc l’opérateur [[ ]] ou l’opérateur $ suivi par le nom de
l’élément (si disponible) :
ma.liste[[1]]
## [1] 33 28 33
Les éléments d’une liste peuvent avoir des longueur différentes :
ma.liste$ville <- ville
ma.liste
## $noms
## [1] "Daniel" "Jehanne" "Romain"
##
## $age
## [1] 33 28 33
##
## $ville
## [1] "paris" "lyon" "lyon" "paris" "nantes"
11