posso creare un operatore di composizione in R:funzioni di livello superiore in R - c'è una funzione di comporre operatore o curry?
`%c%` = function(x,y)function(...)x(y(...))
Per essere utilizzato in questo modo:
> numericNull = is.null %c% numeric
> numericNull(myVec)
[2] TRUE FALSE
ma mi piacerebbe sapere se c'è un set ufficiale di funzioni per fare questo tipo di cosa e altre operazioni come il curry in R. In gran parte questo è per ridurre il numero di parentesi, le parole chiave di funzione ecc nel mio codice.
La mia funzione curry:
> 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"
Ciò è particolarmente piacevole per esempio aggregata:
> 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
Il che sembra molto più elegante e modificabile a:
> aggregate(df$t, df["l"], function(x)paste(collapse="",toupper(x)))
l x
1 1 ADG
2 2 BCH
3 3 EFIJ
Fondamentalmente voglio sapere - è presente già stato fatto per la R?
nota che la mia chiamata al curry non associa attualmente le variabili al curry dall'ambiente in cui è chiamata, ma da dove viene invocata la funzione restituita. Ci sto lavorando. –
Se si desidera semplicemente una funzione Incolla con valori predefiniti migliori, perché preoccuparsi del curry? Basta definire, ad es. 'paste0 <- function (x, ...) paste (toupper (x), collapse =" ", ...)' Quindi puoi chiamare 'aggregate (df $ t, df [" l "], paste0)' –
perché diventa più complesso quando si desidera impilare più funzioni. –