Ich kann einen compose Operator in R erstellen:höhere Funktionen in R - gibt es eine offizielle komponieren Operator oder Curry-Funktion?
`%c%` = function(x,y)function(...)x(y(...))
wie folgt zu verwenden:
> numericNull = is.null %c% numeric
> numericNull(myVec)
[2] TRUE FALSE
aber ich möchte es wissen, ob ein offizieller Satz von Funktionen ist diese Art von tun Sache und andere Operationen wie Curry in R. Hauptsächlich ist dies die Anzahl der Klammern, Funktion Keywords usw. in meinem Code zu reduzieren.
Meine Curry-Funktion:
> 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"
Dies ist besonders schön für z.B. Aggregat:
> 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
Was ich als viel eleganter und bearbeitbare finden:
> aggregate(df$t, df["l"], function(x)paste(collapse="",toupper(x)))
l x
1 1 ADG
2 2 BCH
3 3 EFIJ
Grundsätzlich möchte ich wissen - hat dies bereits für R getan?
Beachten Sie, dass mein Curry-Aufruf derzeit curried Variablen nicht aus der Umgebung bindet, in der es aufgerufen wird, sondern von wo die zurückgegebene Funktion aufgerufen wird. Ich arbeite daran. –
Wenn Sie nur eine Einfügefunktion mit besseren Standardeinstellungen wünschen, warum sollten Sie sich mit dem Curry-Verfahren beschäftigen? Einfach definieren, z.B. 'paste0 <- function (x, ...) einfügen (toupper (x), collapse =" ", ...)' Dann kann man 'aggregate (df $ t, df [" l "], paste0)' nennen –
weil es komplexer wird, wenn Sie mehr Funktionen stapeln möchten. –