From maechler at stat.math.ethz.ch  Fri Jan 23 14:36:47 2009
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Fri, 23 Jan 2009 14:36:47 +0100
Subject: [Rd] str(<1d-array>)
In-Reply-To: <4978B471.70506@acm.org>
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>
	<4978B471.70506@acm.org>
Message-ID: <18809.51183.231595.496032@stat.math.ethz.ch>

>>>>> "TP" == Tony Plate <tplate at acm.org>
>>>>>     on Thu, 22 Jan 2009 11:01:21 -0700 writes:

    TP> 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.
    >> 
    TP> Brevity is good, but clarity is important too.   The output of str is 
    TP> usually decipherable, but not so much in this case.  It's easy to 
    TP> dismiss suggestions like replacing "chr" with "character" - the increase 
    TP> in clarity would be minimal.  However, the potential increase in clarity 
    TP> for a 1-d array is significant - the decrease in brevity is at question 
    TP> here. Given the rarity of the case it seems like a decent tradeoff to 
    TP> add "(1d-array)" (one could even just write "(1d)").   1-d arrays are 
    TP> sufficiently rare that no concise and clear method of indicating them 
    TP> using brackets or other symbols has arisen. You did say you "can be 
    TP> convinced to change" it, but I won't attempt beyond this! :-)

well, "still can be .." .....

So you currently propose to replace
     "int [,1:10] 5 5 9 23 26 16 9 4 2 1"
by
     "int [1:10](1d) 5 5 9 23 26 16 9 4 2 1"
where Pat had
     "int [1:10(,)] 5 5 9 23 26 16 9 4 2 1"

Since the [.....] is where we specify the dimensionality of all
arrays in str(), I'd like to try something where things remain
inside "[....]" as with Pat's version or e.g., with

     "int [1:10/1d] 5 5 9 23 26 16 9 4 2 1"

Opinions, further proposals ?

Martin


    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] str(<1d-array>)
Martin Maechler