如何比较功能?

sgi*_*ibb 13 r function

有没有办法比较两个函数对象是否相同?

m <- mean
m == mean ## don't work

## this seems not to be the correct way:
functionBody(mean)==functionBody(m)
Run Code Online (Sandbox Code Playgroud)

编辑:更多细节.我有一个带有两个参数的函数(一个矩阵和一个用户定义的函数,它按列方式应用,例如mean,median,...).如果该功能是mean我想要改为使用colMean(以节省一些运行时间).

foo <- function(m, fun) {
  #if (fun==mean) {
  #  return(colMeans(m));
  #} else {
    return(apply(m, 2, fun));
  #}
}
Run Code Online (Sandbox Code Playgroud)

dig*_*All 20

你可以使用identical:

identical(m,mean)
Run Code Online (Sandbox Code Playgroud)

  • 反例:m < - function(y,...){UseMethod("mean")}; m(c(1,2,3)); 相同(均值,m)#[1] FALSE (3认同)
  • @DWin:显然,此方法仅检查两个变量是否指向相同的函数,而不是检查所使用的代码是否相同.如果OP需要后者,他/她就不会写"这似乎不是正确的方式"对身体检查IMO ... (2认同)

mat*_*fee 6

我使用isTRUE(all.equal(function1,function2)),但这与其他方法有类似的缺点.

有趣的是,all.equal给出了两个操作数如何不同的一个很好的总结(试试all.equal(function1,function2).