Binding outside variables in R

前端 未结 1 513
深忆病人
深忆病人 2020-12-20 21:02

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

相关标签:
1条回答
  • 2020-12-20 21:29

    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)
    }
    
    0 讨论(0)
提交回复
热议问题