[Rd] RFC: Proposal to make NROW() and NCOL() slightly more general
Martin Maechler
maechler at stat.math.ethz.ch
Sat Feb 4 17:38:52 CET 2012
The help has
> Description:
> 'nrow' and 'ncol' return the number of rows or columns present in 'x'.
> 'NCOL' and 'NROW' do the same treating a vector as 1-column matrix.
and
> x: a vector, array or data frame
I'm proposing to extend these two convenience functions
to also work ``correctly'' for generalized versions of matrices.
The current implementation :
NROW <- function(x) if(is.array(x)||is.data.frame(x)) nrow(x) else length(x)
NCOL <- function(x) if(is.array(x) && length(dim(x)) > 1L || is.data.frame(x)) ncol(x) else 1L
only treats something as matrix when is.array(.) is true,
which is not the case, e.g., for multiprecision matrices from
package 'gmp' or for matrices from packages SparseM, Matrix or similar.
Of course, all these packages could write methods for NROW, NCOL
for their specific matrix class, but given that the current
definition is so simple,
I'd find it an unnecessary complication.
Rather I propose the following new version
NROW <- function(x) if(length(dim(x)) || is.data.frame(x)) nrow(x) else length(x)
NCOL <- function(x) if(length(dim(x)) > 1L || is.data.frame(x)) ncol(x) else 1L
I've tested to see that it does not change any of the R 'make
check-all' checks...
but I'd really like to let this pass by as a general RFC..
(in spite of the fact that I'll offline for almost all the rest
of the weekend).
Martin Maechler
More information about the R-devel
mailing list