From: Martin Maechler <maechler_at_stat.math.ethz.ch>

Date: Wed 11 Jan 2006 - 02:13:30 EST

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Wed Jan 11 02:19:51 2006

Date: Wed 11 Jan 2006 - 02:13:30 EST

>>>>> "Gregory" == Gregory Jefferis <gsxej2@cam.ac.uk> >>>>> on Tue, 10 Jan 2006 14:47:43 +0000 writes:

Gregory> I want to test the dimensions of an incoming Gregory> vector, matrix or array safely Gregory> and succinctly. Specifically I want to check ifGregory> the unknown object has exactly 2 dimensions with a Gregory> specified number of rows and columns.

Gregory> I thought that the following would work:

>> obj=matrix(1,nrow=3,ncol=5)

* >> identical( dim( obj) , c(3,5) )
*

Gregory> [1] FALSE

>> identical( dim( obj) , as.integer(c(3,5)))

Gregory> OR

>> isTRUE(all( dim( obj) == c(3,5) ))

the last one is almost perfect if you leave a way the superfluous isTRUE(..).

But, you say that it's part of your function checking it's
arguments.

In that case, I'd recommend

if(length(d <- dim(obj)) != 2) stop("'d' must be matrix-like") if(!all(d == c(3,5))) stop("the matrix must be 3 x 5")

which also provides for nice error messages in case of error. A more concise form with less nice error messages is

stopifnot(length(d <- dim(obj)) == 2,

d == c(3,50))

## you can leave away all(.) for things in stopifnot(.)

Gregory> Neither of which feel quite right. Is there a 'correct' way to do this?

Gregory> Many thanks,

You're welcome,

Martin Maechler, ETH Zurich

Gregory> Greg Jefferis.

Gregory> PS Thinking about it, the second form is (doubly) wrong because:

>> obj=array(1,dim=c(3,5,3,5))

* >> isTRUE(all( dim( obj) == c(3,5) ))
*

Gregory> [1] TRUE

Gregory> OR

>> obj=numeric(10)

* >> isTRUE(all( dim( obj) == c(3,5) ))
*

Gregory> [1] TRUE

Gregory> (neither of which are equalities that I am happy with!)

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Wed Jan 11 02:19:51 2006

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:41:59 EST
*