有没有办法比较两个函数对象是否相同?
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));
#}
}
答案 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