[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