Eventuali duplicati:
How to write an R function that evaluates an expression within a data-framePerché la valutazione lazy non funziona in questa funzione R?
Voglio scrivere una funzione che ordina un data.frame - invece di usare l'ordine ingombrante(). Dato qualcosa come
> 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
voglio dire qualcosa come:
sort.df(x,b)
Quindi, ecco la mia funzione:
sort.df <- function(df, ...) {
with(df, df[order(...),])
}
ero davvero orgoglioso di questo. Data la pigra valutazione di R, ho pensato che il parametro ... sarebbe stato valutato solo quando necessario - e a quel punto sarebbe stato in ambito, a causa di 'con'.
Se eseguo direttamente la riga 'with', funziona. Ma la funzione no.
> 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
Cosa c'è che non va e come risolverlo? Per esempio, vedo spesso questo tipo di "magia" in pacchetti come plyr. Qual è il trucco?
sort.df (x, x $ b) funziona, ma ancora non ho idea perché sorta. df (x, b) non funziona – Ali
Vedi anche 'plyr :: arrange' che fa esattamente questo. – hadley
Grazie! Non sapevo di organizzare nonostante l'uso di Plyr ogni giorno. Un altro esempio è che è difficile trovare le giuste soluzioni nel mondo R - e così tanta buona programmazione R sta imparando le migliori pratiche usando pochi buoni pacchetti. –