[R] testing for integer
Bill.Venables at CMIS.CSIRO.AU
Sun Feb 25 00:54:04 CET 2001
Faheem Mitha writes:
> -----Original Message-----
> From: [mailto:faheem at email.unc.edu]
> Sent: Sunday, 25 February 2001 7:00
> To: r-help at stat.math.ethz.ch
> Subject: [R] testing for integer
> Dear People,
> Consider the following fragment of R code
> choose <- function(n,r)
> if( is.integer(n) && is.integer(r) && n > 0 && r >= 0 )
> .C("choose",as.double(n),as.double(r),comb = double(1))$comb
> else stop("n must be a positive integer and r a non-negative integer.")
> This is a practice function (n choose r), which I wrote using a call to C
> code. Unfortunately, there is the following problem. I thought I would put
> in error checking for whether the arguments were integers. However,
> is.integer(1), for example, returns FALSE. However is.numeric(1) returns
> TRUE. It seems that explicit coercion is required for this ie.
> is.integer(as.integer(1)) returns true However, I can't use as.integer,
> because it is too aggressive for just error checking: it rounds off the
> value to the greatest integer less than. Can anyone suggest a suitable
> method of checking for an integer in this case?
> Sincerely, Faheem Mitha.
There is a slight confusion here between the mathematical notion of
"integer" (meaning a whole number) and the computing notion of "integer"
(meaning a quantity stored in a particular way). is.integer is a test for
the latter, you want a test for the former. Here is a pretty standard
one-liner to do that. It handles vector arguments and tests if they are all
whole number values:
whole.number <- function(k) all((k %% 1) == 0)
You might use if(whole.number(c(n,r)) && ....
Bill Venables, CSIRO/CMIS Environmetrics Project
Email: Bill.Venables at cmis.csiro.au
Phone: +61 7 3826 7251
Fax: +61 7 3826 7304
Postal: PO Box 120, Cleveland, Qld 4163, AUSTRALIA
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
More information about the R-help