评估函数内环境中的表达式

时间:2014-01-06 21:04:08

标签: r

考虑:

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"

2 个答案:

答案 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)
      })))
}