Dans de nombreuses langues de programmation, les variables vectorielles sont considérées comme différentes des scalaires, qui sont des variables à un seul nombre. Considérons le code C suivant, par exemple:
;
Cela demande au compilateur d'attribuer de l'espace pour un seul entier nommé x et un tableau à trois éléments (terminologie C analogue au type de vecteur de R) nommé y. Mais dans R, les nombres sont réellement considérés comme des vecteurs à un élément.
Les types de variables R sont appelés modes. Rappelez à partir du chapitre 1 que tous les éléments d'un vecteur doivent avoir le même mode, qui peut être entier, numérique (nombre à virgule flottante), caractère (chaîne), logique (booléen), complexe, etc. Si vous avez besoin de votre code de programme pour vérifier le mode d'une variable x, vous pouvez l'interroger par le type d'appel de (x).
Contrairement aux indices vectoriels dans les langues de la famille ALGOL, comme C et Python, les indices vectoriels dans R commencent à 1.
1 Ajout et suppression d'éléments vectoriels
Les vecteurs sont stockés comme des tableaux en C, de manière contiguë, et vous ne pouvez donc pas insérer ou supprimer des éléments - quelque chose que vous pourriez utiliser si vous êtes un programmeur Python. La taille d'un vecteur est déterminée lors de sa création, donc, si vous souhaitez ajouter ou supprimer des éléments, vous devrez réaffecter le vecteur.
Par exemple, ajoutons un élément au milieu d'un vecteur à quatre éléments:
Ici, nous avons créé un vecteur à quatre éléments et l'avons assigné à x. Pour insérer un nouveau numéro 168 entre les troisième et quatrième éléments, nous avons relié les trois premiers éléments de x, puis le 168, puis le quatrième élément de x. Cela crée un nouveau vecteur à cinq éléments, ce qui laisse x intact pour le temps. Nous avons alors attribué ce nouveau vecteur à x.
Dans le résultat, il semble que nous ayons réellement changé le vecteur stocké dans x, mais nous avons vraiment créé un nouveau vecteur et stocké ce vecteur en x. Cette différence peut sembler subtile, mais elle a des implications. Par exemple, dans certains cas, il peut restreindre le potentiel de performance rapide dans R, comme indiqué dans le chapitre 14.
NOTE Pour les lecteurs ayant un arrière-plan en C, en interne, x est vraiment un pointeur, et la réaffectation est implémentée en pointant x vers le vecteur nouvellement créé.
2 Obtenir la longueur d'un vecteur
Vous pouvez obtenir la longueur d'un vecteur en utilisant la fonction length ():
Dans cet exemple, nous connaissons déjà la longueur de x, donc il n'est vraiment pas nécessaire de l'interroger. Mais en écrivant le code de fonction général, vous devrez souvent connaître la longueur des arguments vectoriels.
Par exemple, supposons que nous voulons avoir une fonction qui détermine l'indice de la première valeur 1 dans l'argument vectoriel de la fonction (en supposant que nous sommes sûrs qu'il existe une telle valeur). Voici une (pas nécessairement efficace), nous pourrions écrire le code:
Sans la fonction length (), nous aurions besoin d'ajouter un second argument à firstl (), disons en le nommant n, pour spécifier la longueur de x.
Notez que dans ce cas, l'écriture de la boucle comme suit ne fonctionnera pas:
pour (n en x)
Le problème avec cette approche est qu'il ne nous permet pas de récupérer l'index de l'élément désiré. Ainsi, nous avons besoin d'une boucle explicite, qui nécessite à son tour calculer la longueur de x.
Un autre point sur cette boucle: pour un codage attentif, vous devriez vous inquiéter que la longueur (x) pourrait être 0. Dans ce cas, regardez ce qui arrive à l'expression l: longueur (x) dans notre boucle for:
Notre variable i dans cette boucle prend la valeur 1, puis 0, ce qui n'est certainement pas ce que nous voulons si le vecteur x est vide.
Une alternative sûre est d'utiliser la fonction R plus avancée seq (), comme nous en parlerons dans la section 2.4.4.
3 Matrices et matrices en tant que vecteurs
Les tableaux et les matrices (et même les listes, dans un sens) sont en fait des vecteurs aussi, comme vous le verrez. Ils ont simplement des attributs de classe supplémentaires. Par exemple, les matrices ont le nombre de lignes et de colonnes. Nous allons les discuter en détail dans le prochain chapitre, mais il convient de noter maintenant que les tableaux et les matrices sont des vecteurs, ce qui signifie que tout ce que nous disons sur les vecteurs s'applique également à eux. Considérons l'exemple suivant:
La matrice 2 par 2 m est stockée en tant que vecteur à quatre éléments, en colonne, comme (1,3,2,4). Nous avons ensuite ajouté (10,11,12,13), ce qui a donné (11,14,14,17), mais R a rappelé que nous travaillions avec des matrices et a donc donné le résultat 2 par 2 que vous voyez dans l'exemple .