2016-09-16 5 views
6

Gibt es eine Möglichkeit zu bestimmen, ob der Text von zwei verschiedenen Funktionen identisch ist?Testen der Gleichheit zweier Funktionen in 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 

Antwort

10

Ich denke, das ist eine gute Methode. Es funktioniert für viele verschiedene Objekte:

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

... und zeigt auch die Unterschiede, sollte es jeder –

+2

Es ist erwähnenswert, dass 'identical' flexiblere Steuerung bereitstellt, wenn Funktionen als der Vergleich„Deparse und vergleichen“von 'all.equal'. In R-devel wird das Argument "ignore.scrcef" hinzugefügt, das bei Angabe von TRUE für "identical (x, y)" den Wert TRUE zurückgibt. Dies kann auch erreicht werden, indem die Attribute "x" und "y" - "identisch" ("attributes <-" (x, NULL), "attributes <-" (y, NULL)) entfernt werden. "Identisch" gibt ein Beispiel für die Flexibilität bei Bytecompiled-Funktionen; 'identisch (x, Compiler :: cmpfun (x))' VS 'identisch (x, Compiler :: cmpfun (x), ignore.bytecode = FALSCH)' VS 'all.equal (x, Compiler :: cmpfun (x)) ' –

3

Mit diffobj Paket:

library(diffobj) 

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

diffPrint(target = x, current = y) 

enter image description here

es in any() Wrapping gibt WAHR/FALSCH:

any(diffPrint(target = x, current = y)) 
# FALSE 
Verwandte Themen