内部函数可以使用调用它的函数环境中存在的变量吗?
inner <- function(x)
{
return(x*y*z*a)
}
outer <- function(x,y,z)
{
a <- x*y*z
inner(x)
}
在这里,当我打电话给inner(x)
时,它是否可以访问a, y
和z
?
答案 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