[R] testing for integer

Bill.Venables@CMIS.CSIRO.AU 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.

--
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 mailing list