> -----Original Message----- > From: r-devel-boun...@r-project.org > [mailto:r-devel-boun...@r-project.org] On Behalf Of Arni Magnusson > Sent: Wednesday, September 08, 2010 11:55 AM > To: r-devel@r-project.org > Cc: Simon Urbanek > Subject: [Rd] Drop single-dimensional array > > Hi Simon, thank you for the concise reply. > > Do you mean the reported behavior of drop() is not a bug? > > It looks like a borderline bug to me (see below), but I'm not > the judge of > that. If this is the intended behavior and serves an actual > purpose, then > that could be explicitly documented in a \note{} on the help page. > > Such a note would slightly reduce the surprise of users > running into this > behavior. > > This is related to the oddity that one-dimensional arrays are: > > array(month.abb, dim=c(1,1,12)) # array > array(month.abb, dim=c(1,12)) # matrix > array(month.abb, dim=12) # array > > Firstly, one would expect the pattern to be > array-matrix-vector.
I would expect the array() constructor function to return something of class array. (I guess matrix is acceptable because it inherits from array). One dimensional arrays and vectors act very similarly when used in R code. E.g., names(array1d) gives you the same thing as dimnames(array1d)[[1]]. Accessing them from C code probably shows more differences. Are there features beyond drop's behavior that are causing you to be concerned about differences between the 2 types? drop(x) and x[..., drop=TRUE] have always bugged me because you couldn't control which dimensions got dropped. E.g., if you have a n by 2 by 3 array and want to get the 3rd n by 2 slice of it as a matrix you can do array[,,3,drop=TRUE] except when n==1. It would be nice to be able to say "drop the 3rd dimension, throwing an error if that dimension is not 1". Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > Secondly, > it's easy to drop() the three-dimensional and two-dimensional > objects, but > drop() does nothing to the one-dimensional array. Instead, it > takes an > unintuitive combination of methods to convert a > single-dimensional to a > vector, while retaining its names. Or I may well be missing something > obvious. > > Best regards, > > Arni > > > > On Wed, 8 Sep 2010, Simon Urbanek wrote: > > > wrong address - did you mean R-devel? > > Simon > > > > > > > > On Sep 6, 2010, at 8:35 AM, Arni Magnusson wrote: > > > >> Bug or not, I was surprised by this behavior: > >> > >> x <- tapply(chickwts$weight, chickwts$feed, median) > >> x # array ... I'd like to convert to vector with named elements > >> drop(x) # what, still an array? > >> drop(as.matrix(x)) # this works > >> drop(t(x)) # this works > >> > >> I was expecting drop(x) to return a vector, and I suspect > many R users > >> would too. The title in help(drop), "Drop Redundant Extent > >> Information", suggests that such a simple array would be > converted to a > >> vector. > >> > >> Reading through the help page, I note that this is perhaps > not a clear > >> bug, but somewhat unclear behavior. > >> > >> The most compact way to break the vector out of its > eggshell seems to > >> be > >> > >> t(x)[,] > >> > >> but drop(x) would be much easier to read and write. > There's nothing > >> particularly matrix about x, so it's not obvious that the > conversion > >> should involve as.matrix(x). > >> > >> Thanks, > >> > >> Arni > > > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel