Powiel możliwe:
How to write an R function that evaluates an expression within a data-frameDlaczego leniwa ocena nie działa w tej funkcji R?
Chcę napisać funkcję, która sortuje data.frame - zamiast korzystania kolejność kłopotliwe(). Biorąc pod uwagę coś takiego
> 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
Chcę powiedzieć coś takiego:
sort.df(x,b)
więc oto moja funkcja:
sort.df <- function(df, ...) {
with(df, df[order(...),])
}
byłem naprawdę dumny z tego. Biorąc pod uwagę leniwą ocenę R, doszedłem do wniosku, że parametr ... będzie oceniany tylko wtedy, gdy będzie potrzebny - i do tego czasu będzie w zakresie, ze względu na "z".
Jeśli uruchomię linię "z" bezpośrednio, działa. Ale funkcja nie działa.
> 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
Co jest nie tak i jak to naprawić? Tego rodzaju "magię" widzę często w pakietach takich jak na przykład plyr. Co to za sztuczka?
sort.df (x, x $ b) działa, ale nadal nie mam pojęcia dlaczego sortowania. df (x, b) nie działa – Ali
Zobacz także 'plyr :: arran', które robi dokładnie to. – hadley
Dzięki! Nie wiedziałem o aranżacji mimo używania plyr każdego dnia. Kolejny przykład, że trudno jest znaleźć odpowiednie rozwiązania w świecie R - a tak wiele dobrego programowania R polega na uczeniu się najlepszych praktyk przy użyciu kilku dobrych pakietów. –