[R] dim vs length for vectors

Olivia Lau olau at fas.harvard.edu
Fri Jan 21 16:00:01 CET 2005


>> IMHO the difference between vectors and 1-dimensional arrays 
>> is really annoying and I had already several bugs in my code, 
>> because I mixed these up.
>> Is it possible in future versions of R that R does not 
>> differentiate between vectors and 1-dimensional arrays (e.g. 
>> by treating all vectors as 1-dimensional arrays)?
>
> No, that would break huge amounts of code!
>
> See ?"[" and learn how to use its argument "drop".

What I was proposing doesn't require a lot of programming.  Just 
whenever you call dim(), it does length() if the object is a 
vector and returns it in the format:

R> a <- 1:12
R> dim(a)
  [1]  12

This means that you can provide a unified introduction to data 
structures that take only one type of atomic value (and 
generally call these structures "arrays").  What I call a "one 
dimensional array" only has one dim attribute and hence would 
use a[4] for extraction (for example), which is consistent with 
the usage for "[" (to my understanding).  That way, when you 
introduce "[" and arrays at the same time, you can tell 
beginners:
  1) Run dim()
  2) If there's one dim, use [  ]; if there are 2 dims, use [ 
,  ]; if there are 3 dims, you use [ , , ].
This is conceptually easy for a beginner and avoids a bit of 
frustration.

If I need to initiate an empty vector for example I use

R>  a <- array()

It just looks like the difference between a 1-d array (which 
doesn't exist as far as I can tell) and a vector is semantic, 
and I think that R would be more logical if they were treated as 
the same thing.  This doesn't mean changing the way the 
is.array(), is.vector(), <-, etc functions work, but just 
changing dim().

Yours,

Olivia Lau




More information about the R-help mailing list