Non c'è differenza tra un matrix
e 2D array
:
> x <- matrix(1:10, 2)
> y <- array(1:10, c(2, 5))
> identical(x, y)
[1] TRUE
...
matrix
è solo un costruttore più conveniente, e ci sono molte funzioni e metodi che accettano solo matrici 2D (note anche come matrici).
Internamente, gli array sono solo vettori con un attributo di dimensione:
...
> 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
indicato lo language definition:
Matrici e array sono semplicemente vettori con l'attributo dim
e opzionalmente dimnames
attaccato al vettore.
[...]
L'attributo dim
viene utilizzato per implementare array. Il contenuto dell'array è memorizzato in un vettore nell'ordine delle colonne e l'attributo è un vettore di numeri interi che specifica le rispettive estensioni dell'array . R assicura che la lunghezza del vettore sia il prodotto di delle lunghezze delle dimensioni. La lunghezza di una o più dimensioni potrebbe essere zero.
Un vettore non è la stessa di una matrice monodimensionale poiché l'ultimo ha un attributo dim di lunghezza uno, mentre il primo non ha un attributo dim luminoso .
"... Gli array interni sono solo vettori ...". Che dire del fatto che la funzione di classe fornisce risultati diversi per vettori di vettori e di una dimensione? –
Qual è la tua domanda? Esistono classi implicite in R. – Roland
@Roland Forse dovresti modificare la tua risposta per includere questi dettagli di "ci sono classi implicite". Può essere utile avere una spiegazione esauriente su come usare funzioni come 'class()', 'mode()' e 'typeof()' per determinare alla fine la differenza tra vettori, matrici e matrici, ecc. – nbro