That allows values just bigger than an integer but not just less than an integer. Also, since .Machine$double.eps is a relative tolerance, there are no non-integers greater than one meeting the criterion, and the only non-integers it lets through are like
> is.int(c(1e-20, -1e-20)) [1] TRUE FALSE Since integers a lot bigger than allowed by as.integer can be expressed exactly as reals, the best suggestion appears to be (x == round(x)) > x <- 2^c(30, 50, 200) > x == as.integer(x) [1] TRUE NA NA Warning message: NAs introduced by coercion > x == round(x) [1] TRUE TRUE TRUE On Thu, 30 Jun 2005, Sundar Dorai-Raj wrote: > > > Tuszynski, Jaroslaw W. wrote: >> Hi, >> >> I was trying to figure out if there is a function in R that tests if R >> object contains only integers. I though "is.integer" would be it, but this >> function only checks "whether its argument is of integer type or not". As a >> result >> x = (1:5)^2 >> is.integer(x) >> Returns false. Of course I can write my own function like >> "!any(x!=as.integer(x))" but I am just trying to make sure I am not >> reinventing the wheel. >> >> Jarek > > Since "^" returns a double, it's no wonder is.integer(x) didn't work as > you expected. Perhaps you want something more like > > is.int <- function(x, tol = .Machine$double.eps) { > (x - floor(x)) < tol > } > is.int((1:5)^2) -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ 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