Die beste Methode, um generische / methodische Konsistenz für sort.data.frame zu erstellen?

8

Ich habe mich schließlich dazu entschlossen, die sort.data.frame-Methode, die im Internet verfügbar ist, in ein R-Paket zu packen. Es wird nur zu viel verlangt, um einer Ad-hoc-Verteilungsmethode überlassen zu werden.

Es wird jedoch mit Argumenten geschrieben, die es mit der generischen Sortierfunktion inkompatibel machen:

%Vor%

Wenn ich sort.data.frame so ändere, dass es als Argument abnimmt wie in sort.data.frame(form,decreasing,dat) und verwerfen abweist, verliert es seine Einfachheit, weil Sie immer dat= angeben müssen und Positionsargumente nicht wirklich verwenden können. Wenn ich es zum Ende wie in sort.data.frame(form,dat,decreasing) hinzufüge, stimmt die Reihenfolge nicht mit der generischen Funktion überein. Wenn ich hoffe, dass die Verkleinerung in den sort.data.frame der Punkte (form, dat, ...) gefangen ist, dann glaube ich, dass die generische Funktion bei der Verwendung des positionsbasierten Matchings die zweite Position einem abnehmenden zuweisen wird verworfen. Was ist der beste Weg, um diese beiden Funktionen zu harmonisieren?

Die vollständige Funktion ist:

%Vor%

Beispiel:

%Vor%     
Ari B. Friedman 26.07.2011, 21:41
quelle

4 Antworten

4

Da gibt es ein paar Probleme. sort.data.frame muss dieselben Argumente wie das generische haben, also muss es mindestens

sein %Vor%

Um Dispatch-Arbeit zu haben, muss das erste Argument das Objekt sein, auf das gesendet wird. Also würde ich anfangen mit:

%Vor%

Dabei ist x Ihr dat , formula ist Ihr form und wir bieten einen Standard für die Formel, um alles einzubeziehen. (Ich habe Ihren Code nicht im Detail studiert, um genau zu sehen, was form darstellt.)

Natürlich müssen Sie decreasing im Aufruf nicht angeben, also:

%Vor%

würde sein, wie man die Funktion unter Verwendung der obigen Spezifikationen aufruft.

Wenn Sie nicht möchten, dass sort.data.frame ein generisches S3-Objekt ist, rufen Sie es anderswo auf und Sie können dann beliebige Argumente haben.

    
Gavin Simpson 26.07.2011, 21:53
quelle
6

Verwenden Sie die Funktion arrange in plyr . Es ermöglicht Ihnen, individuell auszuwählen, welche Variablen in aufsteigender und absteigender Reihenfolge sein sollten:

%Vor%

Es hat auch eine elegante Implementierung:

%Vor%

Und desc ist nur eine gewöhnliche Funktion:

%Vor%

Das Lesen der Hilfe für xtfrm wird dringend empfohlen, wenn Sie diese Art von Funktion schreiben.

    
hadley 26.07.2011 23:15
quelle
2

Kannst du einfach die Basisdefinition von sort maskieren, also so etwas?

%Vor%     
Ben Bolker 26.07.2011 22:44
quelle
0

Ich stimme mit @Gavin überein, dass x zuerst kommen muss. Ich würde den decreasing -Parameter nach dem formula setzen, da er wahrscheinlich nicht so oft verwendet wird, und fast nie als Positionsargument.

Das Argument formula würde viel mehr verwendet und sollte daher das zweite Argument sein. Ich stimme auch @Gavin zu, dass es formula und nicht form heißen sollte.

%Vor%

Sie können das Argument decreasing erweitern, um einen logischen Vektor zuzulassen, bei dem jeder TRUE / FALSE-Wert einer Spalte in der Formel entspricht:

%Vor%     
Tommy 26.07.2011 22:04
quelle

Tags und Links