Operator überladen für Funktionen in R - seltsames Verhalten

8

Leider funktionieren Dinge wie (f+g)(3) , wobei f und g beide unäre Funktionen sind, in R nicht. Daher habe ich versucht, den "+" Operator für unäre Funktionen auf folgende Weise zu überladen:

%Vor%

Aber wenn ich versuche, das zu benutzen, tut das nichts. Der Code

%Vor%

erzeugt den gleichen Fehler, als wäre +.function noch nicht definiert.

Nach einiger Zeit habe ich herausgefunden, dass es tatsächlich eine Möglichkeit gibt, Funktionen auf diese Weise hinzuzufügen: Wenn die Funktionen Memberfunktionen einer Referenzklasse sind, funktioniert das! Das heißt, der folgende Code (zusammen mit der "+" Definition von oben)

%Vor%

gibt (wie erwartet) "8" zurück. Daher habe ich bereits eine Art Workaround für mein Problem. Jetzt sind meine Fragen:

Was ist der Grund für dieses seltsame Verhalten? Warum kümmert sich +.function nicht um die "normale" Funktion, sondern um die Funktionen der Klassenmitglieder? Hat jemand eine Idee wie man den Operator auf übliche Funktionen "erweitert"?

    
Patrick Roocks 15.03.2013, 12:17
quelle

2 Antworten

5

Wenn Sie die Klasse a erneut definieren, zum Beispiel wie class(a)<-"ownfunction" (oder besser noch class(a)<-c("ownfunction","function") , und Ihre "+.function" als "+.ownfunction" , dann funktioniert (a+a)(2) .

Es scheint, dass die Klasse function auf eine spezielle Art behandelt wird: Wenn Sie debug("+.function");(a+a)(2) ausführen, sehen Sie, dass "+.function" nicht einmal aufgerufen wird.

EDIT: Siehe Kommentare.

    
Jouni Helske 15.03.2013, 12:38
quelle
3

Als Workaround können Sie einen speziellen Operator definieren ( %...% ) gefällt das:

%Vor%     
QkuCeHBH 15.03.2013 12:27
quelle