Data.frame Vs Matrix Vs Array: Definitions Please
On Wed, Oct 27, 2010 at 8:38 AM, Ivan Calandra
<ivan.calandra at uni-hamburg.de> wrote:
What I don't understand is why vectors (with more than one value) don't have dimensions. They look like they do have 1 dimension. For me no dimension would be a scalar. Like in geometry: a point has no dimension, a line has 1, a square has 2, a cube 3 and so on. Is it because of some internal process? The intuitive geometry way of thinking is not programmatically relevant?
Maybe you used APL before. The basic structure in that language is an array but that is not the case for R. The basic structure for data is a vector and more complex data objects are build from that. An array is a more complex object than a vector. A 1d array is not the same as a vector. Dimensions are an additional concept unlike APL.
I would also add these: - the components of a vector have to be of the same mode (character, numeric, integer...)
however, a list with no attributes is a vector too so this is a vector: ? ?> ? vl<- list(sin, 3, "a") ? ?> ? is.vector(vl) ? ?[1] TRUE A vector may not have attributes so arrays and factors are not vectors although they are composed from vectors.
That's also completely unexpected for me! What is then a vector?! And then the difference between a vector and a list?! I mean, in practice, it's not so important, my understanding is probably enough for what I'm doing in R, but I'd like to understand how it works.
A list is really a vector of pointers so the components are of the same type. Its just that you can't access the pointer nature of the components. For example, you can have a matrix based on a list. We have added a dimension to the list so it becomes an array even though its based on a list:
m <- matrix(list(sin, "a", 1, list(1:3)), 2, 2) dput(m)
structure(list(.Primitive("sin"), "a", 1, list(1:3)), .Dim = c(2L,
2L))
m
[,1] [,2] [1,] ? 1 [2,] "a" List,1
is.array(m)
[1] TRUE
class(m)
[1] "matrix"
Also you wrote that a vector may not have attributes. I might be wrong (and certainly am), but aren't names attributes? So with is a named list still a vector: my.list <- list(num=1:3, let=LETTERS[1:2]) names(my.list) [1] "num" "let" is.vector(my.list) [1] TRUE
names don't count. Neither does class.
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com