Programmer en R/Manipuler les vecteurs
Notion de vecteur
modifierDans le chapitre précédent on a pu voir qu'un nombre possède deux types numeric
et vector
. En réalité il s'agit d'un vecteur qui ne contient qu'un seul nombre.
> a = 2
> is (a)
[1] "numeric" "vector"
La notion de vecteur est essentielle. C'est cette structure de donnée qui est utilisée lorsque l'on veut traiter une série de donnée.
Bien qu'étant essentiellement une série de valeurs, R fournit tout de même des opérateurs et fonctions permettant de traiter les vecteurs comme en géométrie ou en algèbre (somme, produit par un scalaire, produit scalaire entre deux vecteurs).
Initialisation d'un vecteur
modifierLa fonction c
permet de créer un vecteur. Tous les éléments d'un vecteur doivent être du même type.
> a = c(12,7,5.3,9.1,24)
> a
[1] 12.0 7.0 5.3 9.1 24.0
> is (a)
[1] "numeric" "vector"
> b = c("Vecteur", "de", "chaîne", "de", "caractère")
> b
[1] "Vecteur" "de" "chaîne" "de" "caractère"
> is (b)
[1] "character" "vector" "data.frameRowLabels"
> c = c("Dans", 1, "vecteur contenant", 1, "nombre tout est convertie en chaîne de caractère")
> c
[1] "Dans"
[2] "1"
[3] "vecteur contenant"
[4] "1"
[5] "nombre tout est convertie en chaîne de caractère"
Les nombres [1]
, ..., [5]
apparaissant ci-dessus sont les indices des différents éléments du vecteur. Le premier indice d'un vecteur est 1.
Plusieurs fonctions permettent de créer des vecteurs :
Fonction | Description | Syntaxe |
---|---|---|
c
|
Crée un vecteur à partir des éléments donnés en paramètre. | c(..., recursive=FALSE)
|
seq
|
Crée une suite arithmétique. | seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),
length.out = NULL, along.with = NULL, ...)
|
:
|
Crée une suite arithmétique de raison 1. from:to est équilavent à seq (from, to)
|
from:to
|
rep
|
Duplique la valeur de x
|
rep(x, ...)
|
> seq (1,13,1.2)
[1] 1.0 2.2 3.4 4.6 5.8 7.0 8.2 9.4 10.6 11.8 13.0
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> rep (0,10)
[1] 0 0 0 0 0 0 0 0 0 0
Extraire ou assigner une composante
modifierPour avoir accès à la valeur du i-ème élément, on utilise la notation [i]
; si l'on veut les éléments i, j et k, on utilise un vecteur d'indices [c(i, j, k)]
.
> x <- c(1:5, 10:15)
> print(x)
[1] 1 2 3 4 5 10 11 12 13 14 15
> x[6]
[1] 10
> x[4:7]
[1] 4 5 10 11
> x[c(1, 3, 6)]
[1] 1 3 10
On peut aussi utiliser un vecteur de booléens ; R extrait alors les éléments correspondant aux valeurs vraies. Par exemple :
> x <- c(1:5, 10:15)
> indices = x > 5
> x[indices]
[1] 10 11 12 13 14 15
Arithmétique des vecteurs
modifierLes opérations arithmétiques entre deux vecteurs de même dimension sont des opérations terme à terme. Une opération arithmétique entre deux vecteurs de même dimension retourne un vecteur dont les éléments correspondent à l'opération arithmétique effectuée pour l'indice correspondant des vecteurs donnés en argument.
> a <- c(1, 6, 2, 4)
> b <- c(9, 2, 6, 1)
> a+b
[1] 10 8 8 5
> a/b
[1] 0.1111111 3.0000000 0.3333333 4.0000000
La somme de deux vecteurs correspond donc à la notion algébrique.
Si un vecteur est plus petit que l'autre, R répète les valeurs du plus petit vecteur jusqu'à générer un vecteur de même taille que le plus grand. En particulier, si un des vecteurs est un scalaire, alors R applique l'opération entre le scalaire et tous les éléments du vecteur
> a <- 1:10
> a+5
[1] 6 7 8 9 10 11 12 13 14 15
Pour déterminer les nombres impairs :
> a %% 2 == 1
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
Ainsi, l'opération multiplication d'un vecteur par un scalaire correspond à l'opération algébrique.
> v <- c(2, 3)
> 4*v
[1] 8 12
Opérations algébriques
modifierL'opérateur %*%
(pourcent-astérisque-pourcent) effectue un produit scalaire, en supposant la base orthonormale :
> u <- c(1, 2)
> v <- c(3, -1)
> u%*%v
[,1]
[1,] 1
Notons que le résultat est une matrice d'une seule composante (un tableau d'une seule case). On peut extraire le résultat en prenant l'élément (1, 1) de la matrice, ou bien en faisant la somme cumulée de ce vecteur :
> a <- u%*%v
> is(a)
[1] "matrix" "array" "structure" "vector"
> a[1, 1]
[1] 1
> cumsum(a)
[1] 1
On peut ainsi calculer la norme du vecteur par
> sqrt(u%*%u)
[,1]
[1,] 2.236068
Vecteur comme suite de valeurs
modifierLe vecteur peut aussi représenter une suite u1, u2, …, un. Le logiciel R fournit les fonctions :
min()
,max()
: donne la valeur respectivement minimale et maximale de la suite ;cumsum()
: effectue la somme cumulée du vecteur ; cela correspond à la somme de la série ; cette fonction renvoie un vecteur de même taille que le vecteur initial, contenant
(u1, u1 + u2, …, ∑un) ;cumprod()
: effectue le produit cumulé du vecteur ; cette fonction renvoie un vecteur de même taille que le vecteur initial, contenant
(u1, u1×u2, …, ∏un) ;cummax()
,cummin()
: renvoie respectivement le maximum et le minimum cumulé ; le résultat est un vecteur de même taille, l'élément i étant max{uj, j ∈ [1 ; i]} (resp. min{uj, j ∈ [1 ; i]}).