可能重复:
如何编写一个 R 函数来评估数据框中的表达式
我想编写一个对 data.frame 进行排序的函数——而不是使用繁琐的 order()。鉴于类似
> 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”行,它可以工作。但功能没有。
> 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 这样的包中看到这种“魔法”。有什么诀窍?