你能让一个R函数在求值时看到它自己的形式的值吗?



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

为具体化,设:

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

然后在运行时,我想设置mm <- jj*kk。例如:

ff(2, 3, (jj*kk))

产生:

Error in ff(2, 3, (jj * kk)) : object 'jj' not found

这个错误不会被抛出,直到mm被求值,即在jjkk已经被求值之后评估成功。因此,它们将使用不同的作用域进行第二次求值规则。我知道这是r标准作用域。我在问,我能不能写函数,这样我就可以给mm一个简单的数,或者一个函数其他形式论证,前提是这些论证之前已经或可以被评估过需要mm吗?

请注意,我不是在问我是否应该这样做。我会坚决装出一副很有礼貌的样子请就后一个问题发表意见。

我也不是在问我是否可以预先计算jj并交出简化后的数字。我知道这是一个貌似合理的答案,但它并不成立,原因我已经简化了这个问题。

就目前而言,您的函数ff()不起作用,因为提供的参数是在调用环境的上下文中进行评估的,从这个有利的角度来看,jjkk都是"可见的"。

要在函数自身的求值框架上下文中计算提供给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

相关内容

最新更新