Was sind die vorgeschlagenen Praktiken für den Funktionspolymorphismus in R?

8

Angenommen, ich möchte eine Funktion in R schreiben, die eine Funktion einiger ausreichender Statistiken für einige Daten ist. Angenommen, die Funktion " foo.func aufrufen" hängt nur vom Stichprobenmittelwert einer Stichprobe von Daten ab. Aus praktischen Gründen denke ich, dass Benutzer gerne foo.func die Stichprobe von Zufallsvariablen übergeben (in diesem Fall berechnet foo.func den Stichprobenmittelwert), oder das Stichprobenmittel selbst, was alles% ist co_de% braucht. Aus Gründen der Effizienz wird letzteres bevorzugt, wenn mehrere Funktionen wie foo.func aufgerufen werden, die den Stichprobenmittelwert annehmen können. In diesem Fall muss der Mittelwert nur einmal berechnet werden (in dem realen Problem, das ich habe, könnte die betreffende Stichprobenstatistik rechenintensiv sein).

Zusammenfassend möchte ich foo.func schreiben, um dem Anfänger zugänglich zu sein (die Daten zu übergeben, die Funktion die ausreichenden Statistiken berechnen zu lassen) sowie den Experten (die genügenden Statistiken für die Leistungsfähigkeit vorberechnen und sie einreichen ). Was sind die empfohlenen Praktiken dafür? Habe ich eine logische Flagge übergeben? Mehrere Argumente? Einige Möglichkeiten, dies zu tun, könnten sein:

%Vor%

oder

%Vor%

Ich lehne mich dem ersteren zu, denke ich

    
shabbychef 28.10.2011, 17:39
quelle

2 Antworten

5

Sie können auch Funktionen in die Argumente einbetten, zB:

%Vor%

Als ein Beispiel:

%Vor%

Alternativ können Sie entweder die Standardeinstellung NULL für verschiedene Argumente verwenden und auf is.null(argument) testen oder einfach den Wert von missing(argument) für jedes Argument, das Sie berechnen, überprüfen.

Update 1: Ich habe einen Fehler gemacht, indem ich einen Standardwert von NA vorgeschlagen habe: Es ist viel angemessener, NULL zu verwenden. Die Verwendung von NA und is.na() wird sich für Vektoreingaben merkwürdig verhalten, während NULL nur ein einzelnes Objekt ist - es kann kein Vektor mit NULL-Werten erstellt werden, daher verhält sich is.null(argument) wie erwartet. Entschuldigung für das Vergessen.

    
Iterator 28.10.2011, 17:52
quelle
7

Der R-Weg zur Implementierung von Polymorphismus ist durch ein CLOS-Modell (Common Lisp's OO), bei dem Methoden mit generischen Funktionen (Verben) und nicht mit Klassen (Nomen) assoziiert werden. Zum Beispiel,

%Vor%

In diesem Beispiel wurde Rs S3 OOP-Modell verwendet, was meines Erachtens völlig ausreichend ist. S4 ist moderner und sicherer, aber fügt eine Menge Standard hinzu.

    
hatmatrix 28.10.2011 19:00
quelle

Tags und Links