> langage et graphiques > Vecteurs et opérations > Vecteurs
Vecteurs
Il n'y a pas de nombre isolé sous R, il n'y a que des vecteurs (un nombre isolé est un vecteur de taille 1). Un vecteur est une liste d'éléments simples (numériques, booléens, chaînes de caractères) tous du même type.
Les index des vecteurs commencent à 1 (comme toujours en R).
Définition d'un vecteur :
- v <- c(3, 5, 7)
- vecteur nommé : v <- c("a" = 3, "b" = 5, "c" = 7)
length(v) : nombre d'éléments du vecteur.
Test et conversion de type :
- Teste si le vecteur est numérique : is.numeric(vect) (équivalent : is(vect, "numeric")).
- Teste si le vecteur est de type string : is.character(vect) (équivalent : is(vect, "character")).
- Convertit un vecteur de type string en numérique : as.numeric(vect) (équivalent : as(vect, "numeric"))
- Convertit un vecteur de type numérique en string : as.character(vect) (équivalent : as(vect, "character"))
Les éléments d'un vecteur peuvent avoir des noms :
- v <- c(a = 2, b = 3); print(names(v))
- v <- c(2, 3); names(v) <- c("a", "b")
- On peut alors faire v[1] ou v["a"]
- v["2"] accède à l'élément de nom 2 et non au 2ème élément.
Principe de la complétion cyclique : le vecteur le plus petit voit ses éléments recyclés autant de fois que nécessaire :
x <- c(2, 3); y <- c(4, 5, 6, 7); x + y
[1] 6 8 8 10
1 / x : vecteur dont chaque coordonnée est l'inverse.
c(x, y) : concaténation des 2 vecteurs x et y.
2 * x + y + 1 : le plus petit vecteur est recyclé et 1 est aussi recyclé.
Manipulation de la taille d'un vecteur :
- v <- c(2, 4, 6); length(v) <- 2; v donne 2 4 (vecteur tronqué).
- v <- c(2, 4); length(v) <- 3; v donne 2 4 NA (vecteur agrandi avec des NA).
diff(v) : vecteur des différences entre un élément et l'élément précédant (de taille length(v) - 1).
Vecteurs et indexation :
- x[c(1,5)] : donne un vecteur de 2 valeurs d'index 1 et 5 (si x est un vecteur).
- x[1:5] : donne un vecteur avec les 5 premières valeurs de x.
- x[5] : donne la 5ème valeur de x.
- x[c(1,2,2,1)] : donne un vecteur à 4 valeurs : la 1ère, la 2ème, la 1ère, la 2ème valeur de x.
- x[-(1:5)] : donne un vecteur avec toutes les valeurs de x sauf les 5 premières.
- x[c(TRUE, FALSE, TRUE)] : si x est un vecteur à 3 éléments, renvoie un vecteur avec le premier et le troisième élément (tous ceux dont la valeur du vecteur indice est TRUE). Si x a plus de valeurs que le vecteur booléen indice, les valeurs booléennes sont recyclées.
- x[!is.na(x)] : renvoie un vecteur avec toutes les valeurs déterminées (les valeurs correspondant à un index TRUE).
- x[x > 5] : renvoie un vecteur avec toutes les valeurs > 5
Indexation (subsetting) par un vecteur d'indices :
- ind <- c(2, 3); v <- c("a", "b", "c", "d"); v[ind] : donne c("b", "c"), les valeurs de v d'index donné par ind.
- ind <- c(2, 3); v <- c("a", "b", "c", "d"); v[- ind] : donne c("a", "d"), les valeurs de v d'index en dehors de ind
- si le vecteur d'index est vide, le résultat est vide : ind <- numeric(0); v <- c("a", "b", "c", "d"); v[ind] donne character(0). (on a précisé explicitement le type de ind avec numeric(0), mais ind pourrait résulter d'un calcul)
- ATTENTION, LE PIEGE : ind <- numeric(0); v <- c("a", "b", "c", "d"); v[- ind] : DONNE AUSSI character(0) et non le vecteur de départ !!! Ca peut conduire à des erreurs sur les cas limites ...
Remplacement de valeurs d'un vecteur :
- x[x > 5] <- 0 : met à 0 toutes les valeurs de x supérieures à 5.
- replace(x, which(x > 5), 0) : renvoie un vecteur dont toutes les valeurs > 5 sont remplacées par des 0 (le second argument doit être la liste des indices à remplacer).
- x[x < 0] <- -x[x < 0] : remplace toutes les valeurs de x par les valeurs absolues.
- replace(x, which(x > 5), v[v > 5] ^ 2) : renvoie un vecteur dont toutes les valeurs > 5 sont remplacées par les valeurs du vecteur donné en 3ème argument qui doit avoir même longueur que le vecteur des valeurs à remplacer (permet de remplacer des valeurs par autre chose qu'une constante)
summary : summary(vect) pour un vecteur numérique indique des statistiques simples sur les valeurs (moyenne, médiane, min, max, 1er et 3ème quartiles).
Application d'une fonction à chaque élément d'un vecteur :
- sapply(c("a", "b", "c"), touper) : renvoie un vecteur dont les valeurs sont le résultat de l'application de la fonction à chacun des éléments (si les valeurs originales du vecteur peuvent être utilisées comme noms, elles deviennt les noms des éléments du nouveau vecteur construit, sauf si on fait sapply(c("a", "b", "c"), touper, USE.NAMES = FALSE)).
- lapply(c("a", "b", "c"), touper) : renvoie une liste dont les valeurs sont le résultat de l'application de la fonction à chacun des éléments.
- on peut aussi donner une fonction définie dans l'appel : si vect <- c(1, 2, 3, 4), sapply(vect, function(x) {x ^ 2 + 1}) donne 2 5 10 17.
Application d'une fonction à plusieurs variables à plusieurs vecteurs :
- mapply prend une fonction à n variables et n vecteurs et renvoie le résultat de l'application de la fonction, sous forme de vecteur ou de matrice si possible.
- mapply(function(x, y, z) {return(x + 2 * y + 3 * z)}, seq(5), seq(0, 4), seq(-1, 3)) : renvoie le vecteur -2 4 10 16 22
- la fonction peut aussi renvoyer un vecteur et alors mapply renvoie une matrice avecc autant de lignes : mapply(function(x, y, z) {return(c(z, y, x))}, seq(5), seq(0, 4), seq(-1, 3)) renvoie :
[,1] [,2] [,3] [,4] [,5]
[1,] -1 0 1 2 3
[2,] 0 1 2 3 4
[3,] 1 2 3 4 5
Tri :
- sort(x) : vecteur de coordonnées triées.
- sort(x, decreasing = TRUE) : tri par valeurs décroissantes.
- rev(x) : renverse l'ordre du vecteur.
Vecteurs vides :
- c() est un vecteur non typé qui vaut NULL.
- définition de vecteurs typés vides : integer(), numeric(), character(), factor(), logical().
- Attention : is.null(c()) vaut TRUE, tandis que is.null(character()) vaut FALSE !
Début ou fin d'un vecteur, d'un frame, d'une matrice :
- head(v) : renvoie les 6 premiers éléments du vecteur.
- head(v, 10) : renvoie les 10 premiers éléments du vecteur.
- tail(v) : renvoie les 6 derniers éléments du vecteur.
- tail(v, 10) : renvoie les 10 derniers éléments du vecteur.
Conversion de valeurs avec une lookup table constituée d'un vecteur nommé :
v <- c("a" = "A", "b" = "B", "c" = "C"); v[c("a", "b", "b", "a", "c")] : donne
"A" "B" "B" "A" "C"
Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R