2

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

具体而言,假设:

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

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

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

这产生:

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

在评估之前不会抛出此错误mm,即在成功评估之后jj并且kk已经成功评估。因此,然后使用不同的范围规则对其进行第二次评估。我知道这是 R 标准范围。我在问,如果这些参数已经或可以在 mm需要之前进行评估,我是否可以以这样的方式编写函数,它可以让我给 mm 一个简单的数字或其他形式参数的函数?

请注意,我不是在问我是否应该这样做。我会坚决地假装对就后一个问题发表意见的人保持礼貌。

我也不是在问我是否可以预先计算 jj 并将预先消化的数字交给 ff。我知道这是一个合理的答案,但由于我已经简化了问题的原因,它不起作用。

4

1 回答 1

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
于 2014-07-11T07:05:32.900 回答