On 15/11/2010 9:24 AM, Vadim Patsalo wrote:
Patrick and Bert,

Thank you both for you replies to my question. I see how my naïve expectations 
fail to floating point arithmetic. However, I still believe there is an 
underlying problem.

It seems to me that when asked,

>  c(7.7, 7.8, 7.9) %in% seq(4, 8, by=0.1)
>  [1]  TRUE FALSE  TRUE

R should return TRUE in all instances. %in% is testing set membership... in 
that way, shouldn't it be using all.equal() (instead of the implicit '=='), as 
Patrick suggests the R inferno?

No, because 7.8 is not in the set. Some number quite close to it is there, but no 7.8. This is true for both meanings of "7.8":

  - the number 78/10
  - R's representation of that number

Neither one is in the set. What you have there is R's representation of 4 plus 38 times R's representation of 0.1. (R can represent 4 and 38 exactly, but not 0.1, 7.8, pi, or most other numbers.)

Duncan Murdoch

Is there a convenient way to test set membership using all.equal()? In 
particular, can you do it (conveniently) when the lengths of the numeric lists 
are different?

Thanks again for your reply!
Vadim

On Nov 13, 2010, at 5:46 AM, Patrick Burns wrote:

>  See Circle 1 of 'The R Inferno'.

______________________________________________
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.

______________________________________________
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