我可以在R中创建一个compose运算符:
`%c%` = function(x,y)function(...)x(y(...))
Run Code Online (Sandbox Code Playgroud)
要像这样使用:
> numericNull = is.null %c% numeric
> numericNull(myVec)
[2] TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一套官方功能来完成这类事情以及其他操作,比如在R.中进行currying.这主要是为了减少代码中括号,函数关键字等的数量.
我的咖喱功能:
> curry=function(...){
z1=z0=substitute(...);z1[1]=call("list");
function(...){do.call(as.character(z0[[1]]),
as.list(c(eval(z1),list(...))))}}
> p = curry(paste(collapse=""))
> p(letters[1:10])
[1] "abcdefghij"
Run Code Online (Sandbox Code Playgroud)
这对于例如聚合来说特别好:
> df = data.frame(l=sample(1:3,10,rep=TRUE), t=letters[1:10])
> aggregate(df$t,df["l"],curry(paste(collapse="")) %c% toupper)
l x
1 1 ADG
2 2 BCH
3 3 EFIJ
Run Code Online (Sandbox Code Playgroud)
我发现它比以下更优雅和可编辑:
> aggregate(df$t, df["l"], function(x)paste(collapse="",toupper(x)))
l x
1 1 ADG
2 2 BCH
3 3 EFIJ
Run Code Online (Sandbox Code Playgroud)
基本上我想知道 - 这已经为R做过吗?
根据文件
A function that returns its first argument. This function is useful when writing code in the functional style.
Run Code Online (Sandbox Code Playgroud)
我想知道在哪里可以找到这样一个用例的好例子 - 在角度应用程序中编写功能样式的代码.谢谢