*适用于单一功能组合物的最短lambda表达式

时间:2016-08-22 12:17:02

标签: r lambda

我倾向于使用*apply函数,并且在使用组合函数时发现它很麻烦。我看过pipeRmagrittr。 说我想做(我知道这没有意义)

lapply(-3:10, FUN=function(x){return(sum(abs(x)))})

我可以定义FUN=function(x){return(sum(abs(x)))}的最短方式是什么,现在似乎{. %>% abs %>% sum}是我找到的最短的。

有没有办法{ sum(abs(.)) }或类似的东西?

2 个答案:

答案 0 :(得分:4)

这是某种代码高尔夫挑战吗?

library(functional)
lapply(-3:10, Compose(abs, sum))

当然,定义一个运算符很简单:

`%.%` <- function(x, y) Compose(y, x)
lapply(-3:10, sum %.% abs)

事实上,Hadley的pryr包定义了这个运算符。

答案 1 :(得分:2)

使用模块klmr/functional/lambda,您可以编写

lapply(-3 : 10, x -> sum(abs(x))

或者,你可以写

lapply(-3 : 10, sum %.% abs)

后者使用函数组合运算符,该运算符又在上面链接的模块klmr / functional中定义。