R:内部函数可以使用外部函数的变量吗?

时间:2019-10-02 16:19:06

标签: r precision

内部函数可以使用调用它的函数环境中存在的变量吗?

inner <- function(x)
{
    return(x*y*z*a)
}
outer <- function(x,y,z)
{

    a <- x*y*z
    inner(x)
}

在这里,当我打电话给inner(x)时,它是否可以访问a, yz

1 个答案:

答案 0 :(得分:1)

1)如果我们在inner的定义内定义outer,则它可以访问outer中的变量。

outer <- function(x,y,z) {
    inner <- function(x) x*y*z*a
    a <- x*y*z
    inner(x)
}
outer(2, 3, 4)
## [1] [1] 576

2)我们可以将内部重置环境复制到outer当前运行实例中的环境中。这要求我们修改outer而不是inner

inner <- function(x) x*y*z*a

outer <- function(x,y,z) {
    environment(inner) <- environment() # makes temp copy of inner
    a <- x*y*z
    inner(x)
}
outer(2, 3, 4)
## [1] [1] 576

3)我们可以更改inner以使用其调用方中的变量。这要求我们修改inner而不是outer

inner <- function(x) eval.parent(substitute(x*y*z*a))

outer <- function(x,y,z) {
    a <- x*y*z
    inner(x)
}
outer(2, 3, 4)
## [1] [1] 576