En principe, les matrices ont de longueur et de dimensions fixes, et donc nous ne pouvons pas ajouter ou supprimer des lignes ou des colonnes. Cependant, les matrices peuvent être réaffectées, et nous pouvons donc atteindre le même effet que si nous avions directement fait des ajouts ou des suppressions.


Modification de la taille d'une matrice
Rappelons comment nous réaffecter des vecteurs pour changer leur taille:

  1. > x
  2. [1] 12 5 13 16 8
  3. > x <- c (x, 20) # ajouter 20
  4. > x
  5. [1] 12 5 13 16 8 20
  6. > x <- c (x [1: 3], 20, x [4: 6]) # insérer 20
  7. > x
  8. [1] 12 5 13 20 16 8 20
  9. > x <- x [-2: -4] # supprimez les éléments 2 et 4
  10. > x
  11. [1] 12 16 8 20
Source code

Dans le premier cas, x est à l'origine de  longueur 5, que nous avons étend  6 par conclassement et puis réaffectation. Nous n'avons pas changé littéralement la longueur de x, mais avons créé un nouveau vecteur de x, puis nous avons attribué x à ce nouveau vecteur.
Par exemple, même l'assignation x [2] <- 12 est réellement une réaffectation.
Des opérations analogues peuvent être utilisées pour modifier la taille d'une matrice. Par exemple, les fonctions rbind () (ligne) et cbind () (colonne) vous permettent d'ajouter des lignes ou des colonnes à une matrice.

  1. > one
  2. [1] 1 1 1 1
  3. > z
  4. [,1] [,2] [,3]
  5. [1,] 1 1 1
  6. [2,] 2 1 0
  7. [3,] 3 0 1
  8. [4,] 4 0 0
  9. > cbind(one,z)
  10. [1,] 1 1 1 1
  11. [2,] 1 2 1 0
  12. [3,] 1 3 0 1
  13. [4,] 1 4 0 0
Source code

Ici, cbind () crée une nouvelle matrice en combinant une colonne des 1 avec les colonnes de z. Nous choisissons d'obtenir une impression rapide, mais nous aurions pu attribuer le résultat à z (ou à une autre variable), comme suit:

  1. z <- cbind (one, z)
Source code
Notez également que nous aurions pu compter sur le recyclage:
  1. > cbind(1,z)
  2. [,1] [,2] [,3] [,4]
  3. [1,] 1 1 1 1
  4. [2,] 1 2 1 0
  5. [3,] 1 3 0 1
  6. [4,] 1 4 0 0
Source code
Ici, la valeur 1 a été recyclée dans un vecteur de quatre valeurs 1.
Vous pouvez également utiliser les fonctions rbind () et cbind () comme un moyen rapide de créer de petites matrices. Voici un exemple:
  1. > q <- cbind (c (1,2), c (3,4))
  2. > q
  3. [, 1] [, 2]
  4. [1,] 1 3
  5. [2,] 2 4
Source code
Faites attention avec rbind et cbin (), cependant. Comme créer un vecteur, créer une matrice prend du temps (les matrices sont des vecteurs, après tout). Dans le code suivant, cbind () crée une nouvelle matrice:
  1. z <- cbind (one, z)
Source code
La nouvelle matrice est réaffectée à z; c'est-à-dire que nous lui avons donné le nom z-le même nom que la matrice originale, qui est maintenant disparue. Mais le fait est que nous avons eu une pénalité temporelle dans la création de la matrice. Si nous l'avons fait répéter dans une boucle, la pénalité cumulative serait importante.
Donc, si vous ajoutez des lignes ou des colonnes une à la fois dans une boucle, et que la matrice finira par devenir grande, il est préférable d'allouer une grande matrice en premier lieu. Il sera vide d'abord, mais vous complétez les lignes ou les colonnes une à la fois, plutôt que de faire une quantité de mémoire mémorisée chaque fois.
Vous pouvez également supprimer des lignes ou des colonnes par réaffectation:

  1. > m <- matrix(1:6,nrow=3)
  2. > m
  3. [,1] [,2]
  4. [1,] 1 4
  5. [2,] 2 5
  6. [3,] 3 6
  7. > m <- m[c(1,3),]
  8. > m
  9. [,1] [,2]
  10. [1,] 1 4
  11. [2,] 3 6
Source code