[R] The elegant way to test if a number is a whole number
marc_schwartz at me.com
Thu Sep 8 21:54:11 CEST 2011
On Sep 8, 2011, at 2:42 PM, David Winsemius wrote:
> On Sep 8, 2011, at 3:35 PM, Alexander Engelhardt wrote:
>> Am 08.09.2011 20:48, schrieb Marc Schwartz:
>> > There was a post from Martin Maechler some years ago and I had to search a bit to find it. For these sorts of issues, I typically trust his judgement.
>> > The post is here:
>> > https://stat.ethz.ch/pipermail/r-help/2003-April/032471.html
>> > His solution also handles complex numbers.
>> For those too lazy to follow
>> He is basically creating the function is.whole:
>> is.whole <- function(x)
>> is.numeric(x) && floor(x)==x
> Are you sure? I thought the test would have been all.equal(x, round(x,0) )
> My reasoning was that 1.999999999999 should be considered 2 but floor would make it 1.
David, I am confuzzled. Why would that be equal to 2?
> x == 2
> 2 - x
# The default tolerance is .Machine$double.eps ^ 0.5
> all.equal(x, 2, tol = .Machine$double.eps)
 "Mean relative difference: 5.000445e-13"
> all.equal(x, 2, tol = .Machine$double.eps ^ 0.5)
> > x=1.999999999999
> > x
>  2
> print(x, 15)
> > floor(x)
>  1
> > isTRUE(all.equal(x, floor(x)))
>  FALSE
> > all.equal(x, round(x,0))
>  TRUE
>> Seems like the most appropriate way now. I'll make it so!
Very apropos on the 45th anniversary of Star Trek. :-)
>> Thanks for your help :-)
>> -- Alex
More information about the R-help