考虑:
guy <- new.env(FALSE)
guy$stuff <- mean
guy$lib <- library
guy$stole_this_data <- mtcars
ls(guy)
如何评估函数内环境中的表达式?
例如,我可以对with(guy, args(stuff))
进行以下操作并返回:
> with(guy, args(stuff))
function (x, ...)
NULL
但在一个功能中:
foo <- function(env, fun) {
with(env, args(fun))
}
foo(guy, stuff)
## > foo(guy, stuff)
## Error in args(fun) : could not find function "stuff"
答案 0 :(得分:6)
试试这个:
> foo <- function(env, fun) eval(substitute(args(fun)), env)
> foo(guy, stuff)
function (x, ...)
NULL
ADDED。关于下面的评论,zz
不在env
或其祖先(但在foo2
和{{}中的示例1}},f
的调用者,而 会在评论中发出 not found 错误:
foo2
答案 1 :(得分:6)
如果您想继续使用with
构造,可以选择以下方法:
foo <- function(env, fun) {
fun <- substitute(fun)
eval(bquote(with(env, {
.(fun)
})))
}