Suppose I have the following function:
g = function(x) x+h
Now, if I have in my environment an object named h, I would not hav
There's a difference between the enclosing environment of a function, and its (parent) evaluation frame.
The enclosing environment is set when the function is defined. If you define your function g at the R prompt:
g = function(x) x+h
then the enclosing environment of g will be the global environment. Now if you call g from another function:
f = function() {
h = 3
g(2)
}
the parent evaluation frame is f's environment. But this doesn't change g's enclosing environment, which is a fixed attribute that doesn't depend on where it's evaluated. This is why it won't pick up the value of h that's defined within f.
If you want g to use the value of h defined within f, then you should also define g within f:
f = function() {
h = 3
g = function(x) x+h
g(2)
}
Now g's enclosing environment will be f's environment (but be aware, this g is not the same as the g you created earlier at the R prompt).
Alternatively, you can modify the enclosing environment of g as follows:
f = function() {
h = 3
environment(g) <- environment()
g(2)
}