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并预先计算出预先消化的数字.我知道这是一个看似合理的答案,但由于我已经简化了问题,它不起作用.
就目前而言,您的函数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)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |