puedo crear un operador de composición en R:funciones de nivel superior en R - ¿hay un operador de redacción oficial o función de curry?
`%c%` = function(x,y)function(...)x(y(...))
Para usarse como esto:
> numericNull = is.null %c% numeric
> numericNull(myVec)
[2] TRUE FALSE
pero me gustaría saber si hay un conjunto oficial de funciones para hacer este tipo de cosa y otras operaciones como currying in R. En gran medida esto es para reducir el número de corchetes, palabras clave de función, etc. en mi código.
Mi función de 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"
Esto es especialmente agradable para, por ejemplo, agregada:
> 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
que me parece mucho más elegante y editable que:
> aggregate(df$t, df["l"], function(x)paste(collapse="",toupper(x)))
l x
1 1 ADG
2 2 BCH
3 3 EFIJ
Básicamente quiero saber - esto ha sido ya realizada con el R?
tenga en cuenta que mi llamada al curry actualmente no vincula las variables al curry del entorno donde se invoca, pero desde donde se invoca la función devuelta. Estoy trabajando en eso. –
Si solo quieres una función de pegar con mejores valores predeterminados, ¿para qué molestarse con el currying? Solo defina, p. 'paste0 <- function (x, ...) paste (toupper (x), collapse =" ", ...)' Luego puede llamar a 'aggregate (df $ t, df [" l "], paste0)' –
porque se vuelve más complejo cuando desea apilar más funciones. –