在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
在评估之前,即在jj
和kk
已经成功评估之前,不会引发此错误。因此,然后使用不同的作用域规则对它们进行第二次评估。我了解这是R标准范围。我在问,如果可以编写函数,让我可以给它一个简单的数字,还是其他形式参数的函数,前提是这些参数已经被使用或可以被求值了mm
?
请注意,我并不是在问是否应该这样做。对于那些对后一个问题有意见的人,我将坚决地礼貌。
我也不问我是否可以预先计算jj并递给ff预先消化的数字。我知道这是一个合理的答案,但是由于我简化了这个问题,因此它不起作用。
就目前而言,您的函数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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句