2016-09-16 10 views
6

2つの異なる関数のテキストが同一であるかどうかを判断する方法はありますか? diffobjパッケージ使用2つの関数の等価性のテストR

x <- function(x) print(x + 2) 
y <- function(x) print(x + 2) 
identical(x, y) 
[1] FALSE 
identical(mget("x"), mget("y")) 
[1] FALSE 
identical(unname(mget("x")), unname(mget("y"))) 
[1] FALSE 

答えて

10

私はこれは良い方法だと思います。

all.equal(x,y) 
[1] TRUE 
+2

...とも違いが表示されます、のいずれかの –

+2

それは機能を比較するとき、 'identical'は、より多くの柔軟な制御を提供することは注目に値します「逆パースとの比較」が次のようになります。それは、多くの異なるオブジェクトのために働きます'all.equal'。 R-develでは、「ignore.srcref」引数が追加されます。これは、TRUEに設定されている場合、「同一(x、y)」に対してTRUEを返します。これは、 "x"と "y" - 属性(属性< - "(x、NULL)"、属性< - "(y、NULL))'の属性を削除することによっても達成できます。 '?identical'は、バイトコンパイルされた関数の柔軟性の例も示しています。 (x、compiler :: cmpfun(x)、ignore.bytecode = FALSE) 'VS' all.equal(x、compiler :: cmpfun(x) ) ' –

3

any()でそれをラップ

library(diffobj) 

x <- function(x) print(x + 2) 
y <- function(x) print(x + 2) 

diffPrint(target = x, current = y) 

enter image description here

はFALSE/TRUE与える:

any(diffPrint(target = x, current = y)) 
# FALSE 
関連する問題