2011-02-07 25 views
12

¿Hay algo así como una composición de funciones en R?Composición de funciones en R (y funciones de alto nivel)

Creo que en haskell es algo así como "(.)" Y en agda es el operador del anillo.

Además, encuentro poca información sobre la programación funcional de alto nivel en R. Encontré las funciones "Reducir", "Mapa", "Filtro" ..., ¿hay más? ¿Alguna sugerencia?

+1

para obtener algunos consejos muy útiles sobre funcional programación, eche un vistazo a esta respuesta a una pregunta anterior: http://stackoverflow.com/questions/4874867/learning-functional-programming-with-r/4887648#4887648 – Andrie

Respuesta

8

Usted puede hacer la función de composición de esta manera:

composite<-function(f,g) function(...) f(g(...)) 

f<-function(x) x+1; 
g<-function(x) x*2; 
composite(f,g)(7) 
composite(g,f)(7) 

o hacer operador de este.

Sobre el segundo punto, hay muchos; Creo que los más utilizados son * familia de aplicación (sapply, mapply, tapply, lapply, apply ...).

+0

hola. gracias por la respuesta. una pregunta más que me molesta es: ¿cómo podría usar "f" como atajo para "función"? así como "g <- f (x) x * x" para definiciones de funciones. – mrsteve

+0

@mrsteve: no (con mucha cortar lejos que es). A mí me parece una muy mala idea. –

+0

no @mrsteve desgracia - esta es la única palabra clave en R y, ***, 8 letras. Por otro lado, lambda rechazaría a "gente normal" y f sería confuso ... – mbq

16

El paquete functional tiene un funcional Compose que generaliza a cualquier número de funciones:

set.seed(123) 
x <- matrix(runif(100), 10, 10) 
mean(rowSums(scale(x))) 
# [1] 5.486063e-18 

library(functional) 
Compose(scale, rowSums, mean)(x) 
# [1] 5.486063e-18 

(Nótese que las funciones se aplican de izquierda a la derecha.)

Cuestiones relacionadas