From tplate at acm.org  Thu Jan 22 19:01:21 2009
From: tplate at acm.org (Tony Plate)
Date: Thu, 22 Jan 2009 11:01:21 -0700
Subject: [Rd] x <- 1:2; dim(x) <- 2? A vector or not?
In-Reply-To: <18802.19793.445515.400975@cmath-5.math.ethz.ch>
References: <59d7961d0901121243j6c5c0fcn5836d94a90666623@mail.gmail.com>	<alpine.OSX.1.00.0901130744310.32363@tystie.local>	<59d7961d0901130754j335c480fi673346cd20e031e@mail.gmail.com>	<496CC8B8.6060606@pburns.seanet.com>	<18800.40724.985949.449350@stat.math.ethz.ch>	<4970E99C.9040907@acm.org>
	<18802.19793.445515.400975@cmath-5.math.ethz.ch>
Message-ID: <4978B471.70506@acm.org>

Martin Maechler wrote:
>>>>>> "TP" == Tony Plate <tplate at acm.org>
>>>>>>     on Fri, 16 Jan 2009 13:10:04 -0700 writes:
>>>>>>             
>
>     TP> 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  
>     >> 
>     TP> What about just including "(1d-array)", something like this
>     >> str(f)
>     TP> 'table' int [1:10](1d array) 5 5 9 23 26 16 9 4 2 1
>     TP> - attr(*, "dimnames")=List of 1
>     TP> ..$ : chr [1:10] "0" "1" "2" "3" ...
>     >> 
>     TP> only 9 extra characters for a rare case, and much, much less cryptic?
>
> well,.. the next text request is to use
>  "character" instead of "chr", only 6 extra characters ....
>
> -> no way:  str() has its very concise "style" and should keep
> that.
>   
Brevity is good, but clarity is important too.   The output of str is 
usually decipherable, but not so much in this case.  It's easy to 
dismiss suggestions like replacing "chr" with "character" - the increase 
in clarity would be minimal.  However, the potential increase in clarity 
for a 1-d array is significant - the decrease in brevity is at question 
here. Given the rarity of the case it seems like a decent tradeoff to 
add "(1d-array)" (one could even just write "(1d)").   1-d arrays are 
sufficiently rare that no concise and clear method of indicating them 
using brackets or other symbols has arisen. You did say you "can be 
convinced to change" it, but I won't attempt beyond this! :-)

best,

Tony Plate
> Martin
>
>     TP> -- 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
>     >> 
>     >> 
>
>     TP> ______________________________________________
>     TP> R-devel at r-project.org mailing list
>     TP> https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> 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?
Tony Plate