您能让R函数在评估时看到其自身形式的值吗?

您能让R函数在评估时看到其自身形式的值吗?,r,dynamic,arguments,scoping,lexical-scope,R,Dynamic,Arguments,Scoping,Lexical Scope,在R语言中,假设我有一个函数ff(jj,kk,mm)。我希望调用函数(或在交互会话中调用人)能够使mm在调用时以任意方式依赖jj和kk 对于具体性,假设: ff <- function(jj, kk, mm){ xx <- jj + kk out<- xx/mm out } 这将产生: Error in ff(2, 3, (jj * kk)) : object 'jj' not found 在计算mm之前,即在计算jj和kk之后,不会抛出此错误 评估成

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

对于具体性,假设:

ff <- function(jj, kk, mm){
  xx <- jj + kk  
  out<- xx/mm   
  out
}
这将产生:

Error in ff(2, 3, (jj * kk)) : object 'jj' not found
在计算
mm
之前,即在计算
jj
kk
之后,不会抛出此错误 评估成功。因此,它们将在不同的范围内进行第二次评估 规则。我知道这是R标准范围界定。我在问,我能写这封信吗 函数的作用是让我给mm一个简单的数字,或者一个 其他形式参数,前提是这些参数之前已经或可以进行评估
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

ff另外,周围的paren
(jj*kk)
也不是必需的-没有它们也可以工作。谢谢Josh!这正是工作。这可能值得提出自己的问题,但我确实有一个后续问题。如果您想引用函数自己的环境,如:LookHere@andrewH--Hi。我现在没有时间解释,但听起来你可能需要类似于
look的东西来说明你为什么不应该这样做,它导致:
jj=99;kk=101;ff(2,3,(jj*kk))
忽略刚才设置的
jj
kk
的值,因为当它们分别等于2和3时,在函数内部进行计算。这会让任何没有阅读
ff
文档的R用户感到惊讶……我不确定我是否了解您。如果我有一个函数,你可能会觉得有用
ff <- function(jj, kk, mm){
  mm <- eval(substitute(mm))
  xx <- jj + kk  
  out<- xx/mm   
  out
}

ff(2, 3, (jj*kk))
## [1] 0.8333333