From hb at stat.berkeley.edu  Tue Jan 13 16:54:09 2009
From: hb at stat.berkeley.edu (Henrik Bengtsson)
Date: Tue, 13 Jan 2009 07:54:09 -0800
Subject: [Rd] x <- 1:2; dim(x) <- 2? A vector or not?
In-Reply-To: <alpine.OSX.1.00.0901130744310.32363@tystie.local>
References: <59d7961d0901121243j6c5c0fcn5836d94a90666623@mail.gmail.com>
	<alpine.OSX.1.00.0901130744310.32363@tystie.local>
Message-ID: <59d7961d0901130754j335c480fi673346cd20e031e@mail.gmail.com>

Hi.

On Mon, Jan 12, 2009 at 11:58 PM, Prof Brian Ripley
<ripley at stats.ox.ac.uk> wrote:
> What you have is a one-dimensional array: they crop up in R most often from
> table() in my experience.
>
>> f <- table(rpois(100, 4))
>> str(f)
>
>  'table' int [, 1:10] 2 6 18 21 13 16 13 4 3 4
>  - attr(*, "dimnames")=List of 1
>  ..$ : chr [1:10] "0" "1" "2" "3" ...
>
> and yes, f is an atmoic vector and yes, str()'s notation is confusing here
> but if it did [1:10] you would not know it was an array.  I recall
> discussing this with Martin Maechler (str's author) last century, and I've
> just checked that R 2.0.0 did the same.
>
> The place in which one-dimensional arrays differ from normal vectors is how
> names are handled: notice that my example has dimnames not names, and ?names
> says
>
>     For a one-dimensional array the 'names' attribute really is
>     'dimnames[[1]]'.

Thanks for this explanation.  One could then argue that [1:10,] is
somewhat better than [,1:10], but that is just polish.

/Henrik

>
> I think these days we have enough internal glue in place that an end user
> would not notice the difference (but those working at C level with R objects
> may need to know).
>
> On Mon, 12 Jan 2009, Henrik Bengtsson wrote:
>
>> Ran into the follow intermediate case in an external package (w/
>> recent R v2.8.1 patched and R v2.9.0 devel):
>>
>>> x <- 1:2
>>> dim(x) <- 2
>>> dim(x)
>>
>> [1] 2
>>>
>>> x
>>
>> [1] 1 2
>>>
>>> str(x)
>>
>> int [, 1:2] 1 2
>>>
>>> nrow(x)
>>
>> [1] 2
>>>
>>> ncol(x)
>>
>> [1] NA
>>>
>>> is.vector(x)
>>
>> [1] FALSE
>>>
>>> is.matrix(x)
>>
>> [1] FALSE
>>>
>>> is.array(x)
>>
>> [1] TRUE
>>>
>>> x[1]
>>
>> [1] 1
>>>
>>> x[,1]
>>
>> Error in x[, 1] : incorrect number of dimensions
>>>
>>> x[1,]
>>
>> Error in x[1, ] : incorrect number of dimensions
>>
>> Is str() treating single-dimension arrays incorrectly?
>>
>> What does it mean to have a single dimension this way?  Should it
>> equal a vector?  I am aware of "is.vector returns FALSE if x has any
>> attributes except names".
>>
>> /Henrik
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
> --
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



[Rd] x <- 1:2; dim(x) <- 2? A vector or not?
Henrik Bengtsson