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% Da gibt es ein paar Probleme. sort.data.frame
muss dieselben Argumente wie das generische haben, also muss es mindestens
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:
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.
Verwenden Sie die Funktion arrange
in plyr
. Es ermöglicht Ihnen, individuell auszuwählen, welche Variablen in aufsteigender und absteigender Reihenfolge sein sollten:
Es hat auch eine elegante Implementierung:
%Vor% Und desc
ist nur eine gewöhnliche Funktion:
Das Lesen der Hilfe für xtfrm
wird dringend empfohlen, wenn Sie diese Art von Funktion schreiben.
Kannst du einfach die Basisdefinition von sort
maskieren, also so etwas?
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.
Sie können das Argument decreasing
erweitern, um einen logischen Vektor zuzulassen, bei dem jeder TRUE / FALSE-Wert einer Spalte in der Formel entspricht: