可能重複:
How to write an R function that evaluates an expression within a data-frame爲什麼懶惰的評估工作在這個R函數中?
我想寫一個排序一個data.frame功能 - 而不是使用繁瑣的順序()。鑑於類似
> 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
我想說的是這樣的:
sort.df(x,b)
因此,這裏是我的功能:
sort.df <- function(df, ...) {
with(df, df[order(...),])
}
我真的爲此感到自豪。鑑於R的懶惰評估,我認爲只有在需要的時候纔會評估......參數,到那個時候它將在範圍內,這是由於「與」。
如果我直接運行'with'行,它可以工作。但該功能沒有。
> 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
怎麼了,怎麼解決?例如,我經常在像plyr這樣的軟件包中看到這種「魔力」。有什麼訣竅?
sort.df(X,X $ B)的作品,但我仍然不知道爲什麼排序。 df(x,b)不起作用 – Ali
另請參見'plyr :: arrange'。 – hadley
謝謝!儘管每天都使用plyr,但我不知道有關安排。另一個很難在R世界找到正確解決方案的例子 - 以及很多優秀的R編程,都是使用一些好的包來學習最佳實踐。 –