On Thu, Feb 02, 2012 at 10:00:58AM +0000, Jonas Hal wrote:
> The example here puzzles me. It seems like the < operator doesn't work as 
> expected.
> 
> > l <- 0.6
> > u <- seq(0.4, 0.7, 0.1)
> > u
> [1] 0.4 0.5 0.6 0.7
> > mygrid <- expand.grid("l" = l, "u" = u)
> > mygrid
>     l   u
> 1 0.6 0.4
> 2 0.6 0.5
> 3 0.6 0.6
> 4 0.6 0.7
> > mygridcollapsed <- mygrid[mygrid$l < mygrid$u, ]
> > mygridcollapsed
>     l   u
> 3 0.6 0.6
> 4 0.6 0.7
> 
> In this little example I expect 'mygridcollapsed' only to return row 4 and 
> for it to return row 3 seems wrong. The strange thing is it seems to work if 
> I start the u-sequence at 0.5.

Hi.

As others pointed out, the problem is in different
rounding error of 0.6 and seq(0.4, 0.7, 0.1)[3]. Try

  print(0.6, digits=20)

  [1] 0.5999999999999999778

  print(seq(0.4, 0.7, 0.1)[3], digits=20)

  [1] 0.60000000000000008882

Use round(, digits=1) to force the same rounding in
seq(0.4, 0.7, 0.1) and in c(0.4, 0.5, 0.6, 0.7)

  round(seq(0.4, 0.7, 0.1), digits=1) == c(0.4, 0.5, 0.6, 0.7)

Hope this helps.

Petr Savicky.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to