Under what circumstances does the following example return a local x versus a global x?
The xi’an blog wrote the following at http://xianblog.wordpress.com/2010/09/13/simply-start-over-and-build-something-better/
One of the worst problems is scoping. Consider the following little gem.
f =function() {
if (runif(1) > .5)
x = 10
x
}
The x being returned by this function is randomly local or global. There are other examples where variables alternate between local and non-local throughout the body of a function. No sensible language would allow this. It’s ugly and it makes optimisation really difficult. This isn’t the only problem, even weirder things happen because of interactions between scoping and lazy evaluation.
PS – Is this xi’an blog post written by Ross Ihaka?
Edit – Follow up question.
Is this the remedy?
f = function() {
x = NA
if (runif(1) > .5)
x = 10
x
}
The ‘x’ is only declared in the function if the ‘if’ condition is true, so if ‘runif(1)>.5’ then the second mentioning of the x will make the function return your local x (10), otherwise it will return a globally defined ‘x’ (and if ‘x’ is not defined globally then it will fail)