繁体   English   中英

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

[英]In R, how do I test that two functions have the same definition?

我有两个函数, fg ,它们具有相同的定义:

f <- function(x) { x + 1 }
g <- function(x) { x + 1 }

但是, identical功能认为它们不同:

identical(f, g)
FALSE

我认为这是因为它们在记忆中占据了不同的区域; 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 

我评论的长版本:

引用?identical doc:

也可以看看

all.equal描述两个对象的差异;

在all.equal doc中有:

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

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

您可以deparse函数,然后检查它们是否相同:

identical(deparse(f),deparse(g))
[1] TRUE

正如Tensibai所建议的那样,您可以使用all.equal函数。 需要包装器,因为当对象不相等时, all.equal将返回一个字符向量。

sameDefinition <- function(x, y) { 

    stopifnot(is.function(x), "x must be a function")
    stopifnot(is.function(y), "y must be a function")

    identical(all.equal(x, y), TRUE)
} 

例子:

sameDefinition(f, g)
TRUE

sameDefinition(f, function(x) { x + 2 - 1 })
FALSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM