web-dev-qa-db-fra.com

Quelles sont les différences entre les types de données vectorielles, matricielles et matricielles?

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 dimension
  • matrix est un cas particulier pour les tableaux à 2 dimensions
  • array 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?

28
Eloims

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 éventuellement dimnames 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'attribut dim 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.

34
Roland