[R] testing for integer

John Fox jfox at mcmaster.ca
Sun Feb 25 00:46:30 CET 2001

Dear Faheem,

The following function isn't infallible, but will work to the machine 

 > is.int <- function (x) .Machine$double.eps >= abs(x - floor(x))
 > is.int(-1234.0000000000001)
[1] TRUE
 > is.int(-1234.000000000001)


   is.int <- function (x) 0 == x - floor(x)

   accomplishes the same thing.)

Does that help?


At 03:59 PM 24/02/2001 -0500, you wrote:
>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.

  John Fox
  Department of Sociology
  McMaster University
  email: jfox at McMaster.ca
  web: www.socsci.mcmaster.ca/jfox

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