[R] Multiple comparisons: its a trap!

Barry Rowlingson B.Rowlingson at lancaster.ac.uk
Tue Jul 20 11:08:21 CEST 2004


Liaw, Andy wrote:
> Stupid me: fell into this trap:
> 
> 
>>0 == 0 == 0
> 
> [1] FALSE
> 

  Ouch!

  Python's comparison operators don't have this trap, since they unravel 
each comparison pair in a chain so that:

   (A op1 B op2 C)

becomes:

   (A op1 B) and (B op2 C)


If you want:

  (A op1 B) op2 C

you have to put the parens in, and that makes you remember there's some 
Boolean arithmetic going on in there.

This is a nice feature, since we all are used to reading expressions 
like 2 < X < 10, and you can write them like that in Python, and they 
mean what they look like.

You can write like that in R, but beware, its not just 0 == 0 == 0 that 
opens the trap:

  > X = 5
  > 10 < X < 0
  [1] FALSE
  > 0 > X > 10
  [1] TRUE

  Of course old hand Fortran programmers understand all this since the 
second thing they learnt (after learning how to tap the space bar six 
times) was the order of precedence of operators...

Baz

PS oh, and in Perl (0 == 0 == 0) is a syntax error!




More information about the R-help mailing list