【发布时间】:2019-08-27 10:34:27
【问题描述】:
我不明白为什么这段代码在最后一行打印失败:
f <- function(x) get('v', envir = parent.frame(), inherits = TRUE)
run <- function() {
v <- 'test variable'
print(f())
print((function() f())())
print(apply(X = data.frame(1:2), MARGIN = 1, f))
}
run()
与:
Error in get("v", envir = parent.frame(), inherits = TRUE) :
object 'v' not found
第一个打印语句显示v 在parent.frame(1) 中找到。第二个打印语句显示由于inherits = TRUE,在parent.frame(2) 中找到了v。最后一个是谜。
似乎apply 忽略了get(envir = parent.frame())。我将其追溯到apply() 中的函数forceAndCall()。我错过了什么还是这是一个错误?
在实际应用中,v只定义在函数f的调用环境中(即在parent.frame()或以上),而从不在parent.env()中。
【问题讨论】:
-
有趣。我在第一行
print之后添加了一个包装f的函数g <- function() { f() }; print(g()),它按预期执行并且没有错误。所以inherits参数按预期工作......