如何比较功能?

时间:2012-03-09 17:24:57

标签: r function

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

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

## this seems not to be the correct way:
functionBody(mean)==functionBody(m)

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

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

3 个答案:

答案 0 :(得分:20)

您可以使用identical

identical(m,mean)

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

您可以将函数转换为字符串, 并比较这些字符串。

equal_functions <- function(f,g)
  all( 
    capture.output(print(f)) ==
    capture.output(print(g))
  )
equal_functions(function(x) x, function(x) x) # TRUE

但是,由于非基本原因而有所不同的功能将被视为不同。

equal_functions(function(x) x, function(u) u) # FALSE
equal_functions(
  function(x) x, 
  function(x) 
    x
) # FALSE