Damn scoping in R
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:
fun=function()
{
if (runif(1) > .5)
x = 1
x
}
First it looks damn unspectacular. But wait, whats that:
> 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? :-)
> 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…
Leave a comment
There are multiple options to leave a comment: