on 05/16/2008 09:56 AM Erik Iverson wrote:
> Dear R-help -
>
> I have thought about this question for a bit, and come up with no
> satisfactory answer.
>
> Say I have the numeric vector t1, given as
>
> t1 <- c(1.0, 1.5, 2.0, 2.5, 3.0)
>
> I simply want to reliably extract the unique integers from t1, i.e., the
> vector c(1, 2, 3). This is of course superficially simple to carry out.
Use modulo division:
> t1[t1 %% 1 == 0]
or
> unique(t1[t1 %% 1 == 0])
[1] 1 2 3
[1] 1 2 3
> However, my question is related to R FAQ 7.31, "Why doesn't R think
> these numbers are equal?" The first sentence of that FAQ reads, "The
> only numbers that can be represented exactly in R's numeric type are
> integers and fractions whose denominator is a power of 2."
>
> All the methods I've devised to do the above task seem to ultimately
> rely on the fact that identical(x.0, x) == TRUE, for integer x.
>
> My assumption, which I'm hoping can be verified, is that, for example,
> 2.0 (when, say, entered at the prompt and not computed from an
> algorithm) is an integer in the sense of FAQ 7.31.
>
> This seems to be the case on my machine.
>
> > identical(2.0, 2)
> [1] TRUE
>
> Apologies that this is such a trivial question, it seems so obvious on
> the surface, I just want to be sure I am understanding it correctly.
Keep in mind that by default and unless specifically coerced to integer,
numbers in R are double precision floats:
> is.integer(2)
[1] FALSE
> is.numeric(2)
[1] TRUE
> is.integer(2.0)
[1] FALSE
> is.numeric(2.0)
[1] TRUE
> identical(2.0, as.integer(2))
[1] FALSE
Does that help?
Marc Schwartz
Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.
Archive generated by hypermail 2.2.0, at Fri 16 May 2008 - 17:30:37 GMT.
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.