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

Patrick Burns pburns at pburns.seanet.com
Tue Jan 13 18:00:40 CET 2009


Henrik Bengtsson wrote:
> 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.
>   

Perhaps it could be:

[1:10(,)]

That is weird enough that it should not lead people to
believe that it is a matrix.  But might prompt them a bit
in that direction.


Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of "The R Inferno" and "A Guide for the Unwilling S User")
> /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
>>
>>     
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>



More information about the R-devel mailing list