相关疑难解决方法(0)

R中更高级别的功能 - 是否有官方撰写操作员或咖喱功能?

我可以在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做过吗?

functional-programming r higher-order-functions

37
推荐指数
2
解决办法
5739
查看次数

R中的操作重载

为字符重载'+'最直接的方法是什么?我已经定义'%+%' <- function(...) paste(...,sep=""):

str <- "aa"%+%"bb"%+%"cc" #str="aabbcc"
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种语法.我认为str <- "aa"+"bb"+"cc"会更好.

(我正在构建与RODBC一起使用的长SQL查询,paste在这种情况下通常不是很方便.有什么建议吗?)

string r concatenation string-concatenation

5
推荐指数
2
解决办法
4567
查看次数