在R中,我如何测试两个函数具有相同的定义?

sdg*_*sdh 3 equality r function equivalent

我有两个功能,f并且g,它们具有相同的定义:

f <- function(x) { x + 1 }
g <- function(x) { x + 1 }
Run Code Online (Sandbox Code Playgroud)

但是,该identical函数认为它们不同:

identical(f, g)
FALSE
Run Code Online (Sandbox Code Playgroud)

我认为这是因为它们在记忆中占据了不同的区域; identical(f, f)TRUE.

我只对测试具有相同定义的函数感兴趣; 我可以使用另一个功能吗?

行为应该是:

sameDefinition(f, f)
TRUE

sameDefinition(f, g)
TRUE

sameDefinition(f, function(x) { x + 1 })
TRUE

sameDefinition(f, function(x) { x + 3 }) 
FALSE 

# Equivalent, but different definitions
sameDefinition(f, function(x) { x + 2 - 1 }) 
FALSE 
Run Code Online (Sandbox Code Playgroud)

Ten*_*bai 6

我评论的长版本:

?identicaldoc的引用:

也可以看看

all.equal 描述两个物体的差异;

在all.equal doc中有:

不要直接在if表达式中使用all.equal - 使用isTRUE(all.equal(....))或相同的相同.

所以你真的不需要一个函数,你可以编写isTRUE(all.equal(f,g))并完成你的任务.


Jam*_*mes 5

您可以检查deparse这些功能,然后检查它们是否相同:

identical(deparse(f),deparse(g))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)