我已经定义了一个绑定函数,
b <- function(f,...) function(x) f(x, ...)
所以我可以做类似的事情(这是一个假的例子)
d = data.frame(x=c(1,2,1), y=c(10, 20, 5))
ddply(d, ~x, b(transform, y=sum(y)))
代替
ddply(d, ~x, function (df) { transform(df, y=sum(y)) }
现在,我正在尝试定义一个运算符
'%b%' <- function(x,...) b(x,...)
并尝试
ddply(d, ~x, transform %b% (z=y*10)))
它不起作用。有什么不同 ?
当我做
> b(transform, y=y/sum(y))(d)
x y c.1..2..1.
1 1 0.2857143 1
2 2 0.5714286 2
3 1 0.1428571 1
这行得通,但是
> transform %b% (y=y/sum(y))(d)
Error in transform %b% (y = y/sum(y))(d) : object 'y' not found
我了解,存在“捕获”差异,我该怎么办?