[Rd] seq() does not create proper numbers (PR#10489)
Duncan Murdoch
murdoch at stats.uwo.ca
Tue Dec 4 16:20:48 CET 2007
On 12/4/2007 7:10 AM, rihle at gwdg.de wrote:
> Full_Name: Rico Ihle
> Version: 2.6.1
> OS: Windows XP Professional Version 2002 Pentium(R) 4 CPU 3.2 GHz
> Submission from: (NULL) (134.76.183.24)
This is not a bug. See FAQ 7.31, "Why doesn't R think these numbers are
equal?"
>
>
> # Bug in seq() function:
> x <- seq(-2,2,by=0.01)
You've specified that the step size should be some number that's close
to 0.01, but not exactly 0.01, since R doesn't know how to represent that.
> which(x==0.05)# How that??
> # although:
> x# 0.05 seems to be at position 206 of x!!:
> x[206]
> # Why is this not equal to 0.05?
>
> # Reason:
> x2 <- as.character(x);x2
> x2[206]# Ooooh... It's really not equal to 0.05!! How that? (compare lines 5 and
> 6!)
>
> # Remedy:
> x3 <- round(as.numeric(x),2)
> which(x3==0.05)
>
> # The (necessary) rounding is apparently and unfortunately NOT included in the
> seq() function!!!
> # But it should be!!!
Why should it? You didn't specify a round number as the step size.
Duncan Murdoch
> # Because if one doesn't know about the demonstrated "nice" feature of the seq()
> function
> # (and it is not visible in lines 5 or 6!!!)
> # one gets mad that x[206] is not equal to 0.05 although x[206] is printed as
> 0.05!!!
>
> # Similarly:
> y <- seq(-0.5,.5,by=0.01)
> which(y == 0.05)# None? How that? Result should be 56!!
> y[56]
>
> # but:
> y2 <-as.character(y)
> y2[56]
> which(y2 == 0.05)
>
> # or rounding alternatively:
> which(round(y,2) == 0.05)
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list