Mögliche Duplizieren:
How to write an R function that evaluates an expression within a data-frameWarum funktioniert nicht faule Auswertung in dieser R-Funktion?
Ich möchte eine Funktion schreiben, die eine data.frame sortiert - stattdessen die umständliche Reihenfolge der Verwendung von(). Angesichts so etwas wie
> x=data.frame(a=c(5,6,7),b=c(3,5,1))
> x
a b
1 5 3
2 6 5
3 7 1
ich sagen möchte, so etwas wie:
sort.df(x,b)
Also hier ist meine Funktion:
sort.df <- function(df, ...) {
with(df, df[order(...),])
}
Ich war wirklich stolz. Bei der Lazy-Auswertung von R dachte ich, dass der ... -Parameter nur dann ausgewertet würde, wenn er benötigt würde - und zu diesem Zeitpunkt wäre er aufgrund von "mit" im Geltungsbereich.
Wenn ich die 'mit' Zeile direkt ausführen, funktioniert es. Aber die Funktion nicht.
> with(x,x[order(b),])
a b
3 7 1
1 5 3
2 6 5
> sort.df(x,b)
Error in order(...) : object 'b' not found
Was ist falsch und wie es zu beheben? Ich sehe diese Art von "Magie" häufig in Paketen wie zum Beispiel plyr. Was ist der Trick?
sort.df (x, x $ b) funktioniert, aber ich habe immer noch keine Ahnung, warum Art. df (x, b) funktioniert nicht – Ali
Siehe auch 'plyr :: arrange', was genau das tut. – hadley
Danke! Ich wusste nicht, arrangieren trotz der Verwendung von Plyr jeden Tag. Ein weiteres Beispiel, dass es schwierig ist, die richtigen Lösungen in der R-Welt zu finden - und so viel von guter R-Programmierung besteht darin, Best Practices mit ein paar guten Paketen zu lernen. –