Programmer en R/Manipuler les vecteurs

Un livre de Wikilivres.

Notion de vecteur[modifier | modifier le wikicode]

Dans 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[modifier | modifier le wikicode]

La 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[modifier | modifier le wikicode]

Pour 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[modifier | modifier le wikicode]

Les 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[modifier | modifier le wikicode]

L'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[modifier | modifier le wikicode]

Le 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]}).