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

Tony Plate tplate at acm.org
Fri Jan 16 21:10:04 CET 2009

```Martin Maechler wrote:
>>>>>> "PatB" == Patrick Burns <pburns at pburns.seanet.com>
>>>>>>     on Tue, 13 Jan 2009 17:00:40 +0000 writes:
>>>>>>
>
>     PatB> 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.
>
> yes.  And honestly I don't remember anymore why I chose the
> "[,1:n]" notation.  It definitely was there already before R
> came into existence, as  S  also has had one-dimensional arrays,
> and I programmed the first version of str() in 1990.
>
>     PatB> Perhaps it could be:
>
>     PatB> [1:10(,)]
>
>     PatB> That is weird enough that it should not lead people to
>     PatB> believe that it is a matrix.  But might prompt them a
>     PatB> bit in that direction.
>
> Well, str() was always aimed a bit at experienced S (and R)
> users, and I had always aimed somewhat to keep it's output
> "compact".  I'm quite astonished that the OP didn't know about
> 1D arrays in spite of the many years he's been using R.
> Would a wierd solution like the above have helped?
>
> At the moment, I'd tend to keep it "as is" if only just for
> historical reminescence, but I can be convinced to change the
> current "tendency" ...
>
> Martin Maechler, ETH Zurich
>
What about just including "(1d-array)", something like this
> str(f)
'table' int [1:10](1d array) 5 5 9 23 26 16 9 4 2 1
- attr(*, "dimnames")=List of 1
..\$ : chr [1:10] "0" "1" "2" "3" ...
>
only 9 extra characters for a rare case, and much, much less cryptic?

-- Tony Plate
>
>
>     PatB> Patrick Burns patrick at burns-stat.com +44 (0)20 8525
>     PatB> 0696 http://www.burns-stat.com (home of "The R
>     PatB> 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
>     >>
>     >>
>     >>
>
> ______________________________________________
>     PatB> R-devel at r-project.org mailing list
>     PatB> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

```