你能否启用R函数来评估自己的形式值?

and*_*ewH 2 arguments r dynamic scoping lexical-scope

在R语言中,假设我有一个函数ff(jj,kk,mm).我希望调用函数(或调用人在交互式会话中)能够在调用时使jj和kk以任意方式取决于mm.

具体而言,假设:

ff <- function(jj, kk, mm){
  xx <- jj + kk  
  out<- xx/mm   
  out
}
Run Code Online (Sandbox Code Playgroud)

然后在运行时,我想设置mm <- jj*kk.即:

ff(2, 3, (jj*kk))
Run Code Online (Sandbox Code Playgroud)

这会产生:

Error in ff(2, 3, (jj * kk)) : object 'jj' not found
Run Code Online (Sandbox Code Playgroud)

mm在评估之前,即在成功评估之后jj,不会抛出此错误kk.因此,他们将使用不同的范围规则进行第二次评估.我知道这是R标准范围.我问,我可以用这样的方式编写函数,它允许我递给一个简单的数字,或者其他形式参数的函数,只要这些参数在mm需要之前已经或者可以被评估了 吗?

请注意,我不是在问我是否应该这样做.对于后一个问题提出意见的人,我会坚决地假装礼貌.

我也不会问我是否可以预先计算jj并预先计算出预先消化的数字.我知道这是一个看似合理的答案,但由于我已经简化了问题,它不起作用.

Jos*_*ien 5

就目前而言,您的函数ff()不起作用,因为提供的参数是在调用环境的上下文中进行评估的,其中有利位置既不是"可见" jj也不kk是"可见".

要评估在mm函数自己的评估框架的上下文中提供的语句,请使用eval(substitute()),如下所示:

ff <- function(jj, kk, mm){
  mm <- eval(substitute(mm))
  xx <- jj + kk  
  out<- xx/mm   
  out
}

ff(2, 3, (jj*kk))
## [1] 0.8333333
Run Code Online (Sandbox Code Playgroud)