考虑R代码:
foo <- function(formula){ Y <- get(formula[[2]]) print(Y) } main <- function(){ Y <- 1 X <- 2 foo(Y ~ X) } main()
结果表明,在 get(formula[[2]]) ,找不到对象 Y . 如何使函数在本地设置中读取公式? 如何更改代码以使其运行和打印 Y ?
get(formula[[2]])
Y
默认情况下 get 将寻找 Y 在当前呼叫环境中 得到 ,这正是可用的 foo 自身(即。 pos = -1 ). R公式的一个优点是它们有一个关联的环境作为属性,因此我们可以指定 得到 它应该在那个环境中寻找:
get
得到
foo
pos = -1
foo <- function(formula){ Y <- get(formula[[2]], environment(formula)) print(Y) } main()
[1] 1
指定环境通常是一个好主意,因此,例如,这仍然会得到 Y 从原始上下文来看:
foo <- function(formula){ Y <- 3 bar <- get(formula[[2]], environment(formula)) print(bar) }