[R] the less-than-minus gotcha

Mike Miller mbmiller+l at gmail.com
Mon Feb 2 00:09:38 CET 2015


I've got to remember to use more spaces.  Here's the basic problem:

These are the same:

v< 1
v<1

But these are extremely different:

v< -1
v<-1

This mistake can get you even inside of a function call like this:

> v <- -2:2
> which( v<1 )
[1] 1 2 3
> which( v<-1 )  # oops, I meant v< -1 not v<-1 a HUGE mistake!
Error in which(v <- 1) : argument to 'which' is not logical
> v
[1] 1

It throws an error but not because I just destroyed my data.  R has no way 
of knowing that I didn't intend to overwrite the vector.

This was how it got me:

which( frame$var>4 )   # no problem

which( frame$var<-4 )  # huge problem: frame$var is destroyed

Too late now:  The data in frame$var were all overwritten with 4s.  So the 
data are lost and might not be recoverable.

Maybe the tactic that will save me in the future is to remember to always 
use plenty of spaces:

which( frame$var > 4 )

which( frame$var < -4 )

That also makes the code easier to read.  In a script, I probably would 
have done that, but in an interactive session I can be lazy.

It seems that there are a lot of "R gotcha" pages on the web but quite a 
few of the examples show R behaving exactly like I would want and expect 
(e.g., of course NA + 5 returns NA)...

https://github.com/mikelove/r-gotchas/blob/master/README.md
http://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve-run-across
http://www.burns-stat.com/pages/Tutor/R_inferno.pdf
http://biostat.mc.vanderbilt.edu/wiki/Main/LinuxWorkshopRProgramingTipsAndGotchas
http://tim-smith.us/arrgh/

I didn't happen to see my example on any list, but I didn't read them 
thoroughly, so it's probably there.

Mike



More information about the R-help mailing list