Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Ok, R is very well-considered in certain respects, but there are also some things annoying me… This time it’s scoping…

Let’s have a look to the following code:

 123456 fun=function() {     if (runif(1) > .5)         x = 1     x }

First it looks damn unspectacular. But wait, whats that:

 12345 > x=0 > fun() [1] 1 > fun() [1] 0

Taking a closer look to the function shows that the returned value is randomly chosen from local (runif(1) > .5) or global scope (runif(1) <= .5). So you can’t expect a result from this function. Nasty, especially while debugging external code, isn’t it? :-)

 12 > sum(sapply(1:10^6, function (null) fun()))/10^6 [1] 0.499681

So again my advise: Think about such specific features! This won’t happen in any sensible language…