在R语言中,假设我有一个函数ff(jj,kk,mm)。我希望调用函数(或调用人在交互式会话中)能够在调用时使jj和kk以任意方式取决于mm。
具体而言,假设:
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
之前,即在jj
和kk
之后,才会抛出此错误
评估成功。因此,他们将在第二次进行不同的范围评估
规则。我知道这是R标准范围。我问,我可以写
以这样一种方式运作,它让我可以用一个简单的数字或一个函数
其他形式论证,只要这些论点已经或可以在之前进行评估
需要mm
?
请注意,我不是在问我是否应该这样做。我会坚决地假装对那些有礼貌的人有礼貌 提出对后一个问题的看法。
我也不会问我是否可以预先计算jj并预先计算出预先消化的数字。我知道 这是一个看似合理的答案,但由于我已经简化了原因,它不起作用 问题。
答案 0 :(得分:5)
目前,您的功能ff()
不起作用,因为supplied arguments are evaluated in the context of the calling environment,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