[R] dim vs length for vectors

Huntsinger, Reid reid_huntsinger at merck.com
Fri Jan 21 18:42:55 CET 2005


I think you can assign a dim attribute to a vector to make a 1-d array.

> v <- 1:10
> dim(v)
NULL
>dim(v) <- 10
>dim(v)
[1] 10

Also,

> u <- array(1:10,dim=10)
> u
 [1]  1  2  3  4  5  6  7  8  9 10
> dim(u)
[1] 10

Perhaps the philosophy is that vectors are the basic, underlying type, and
arrays (including 1-d arrays) carry additional structure information. So
arrays are vectors, if you forget the "dim" attribute, but vectors are not
any particular type of array.

Reid Huntsinger

-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Olivia Lau
Sent: Friday, January 21, 2005 10:00 AM
To: Uwe Ligges; Arne Henningsen
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] dim vs length for vectors


>> 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

______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html




More information about the R-help mailing list