R est fourni avec trois types pour stocker des listes d'objets homogènes: vector
, matrix
et array
.
Autant que je sache:
vector
est un cas particulier pour les tableaux à 1 dimensionmatrix
est un cas particulier pour les tableaux à 2 dimensionsarray
peut également avoir n'importe quel niveau de dimension (y compris 1 et 2).Quelle est la différence entre l'utilisation de tableaux 1D sur des vecteurs et des tableaux 2D sur des matrices? Avons-nous besoin de lancer entre ceux-ci, ou cela se produira-t-il automatiquement?
Il n'y a pas de différence entre un matrix
et un 2D array
:
> x <- matrix(1:10, 2)
> y <- array(1:10, c(2, 5))
> identical(x, y)
[1] TRUE
...
matrix
est juste un constructeur plus pratique, et il existe de nombreuses fonctions et méthodes qui n'acceptent que les tableaux 2D (a.k.a. matrices).
En interne, les tableaux ne sont que des vecteurs avec un attribut de dimension:
...
> attributes(x)
$dim
[1] 2 5
> dim(x) <- NULL
> x
[1] 1 2 3 4 5 6 7 8 9 10
> z <- 1:10
> dim(z) <- c(2, 5)
> is.matrix(z)
[1] TRUE
Pour citer définition du langage :
Les matrices et les tableaux sont simplement des vecteurs avec l'attribut
dim
et éventuellementdimnames
attachés au vecteur.[...]
L'attribut
dim
est utilisé pour implémenter des tableaux. Le contenu du tableau est stocké dans un vecteur dans l'ordre des colonnes et l'attributdim
est un vecteur d'entiers spécifiant les étendues respectives du tableau. R s'assure que la longueur du vecteur est le produit des longueurs des dimensions. La longueur d'une ou plusieurs dimensions peut être nulle.Un vecteur n'est pas le même qu'un tableau unidimensionnel puisque ce dernier a un attribut dim de longueur un, tandis que le premier n'a pas d'attribut dim.