[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
precision:
> is.int <- function (x) .Machine$double.eps >= abs(x - floor(x))
>
> is.int(-1234.0000000000001)
[1] TRUE
> is.int(-1234.000000000001)
[1] FALSE
>
(Actually
is.int <- function (x) 0 == x - floor(x)
accomplishes the same thing.)
Does that help?
John
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