Skip to content

[R-es] Aplicar una función repetidamente

4 messages · Jorge I Velez, Carlos Ortega, rubenfcasal +1 more

#
Hola a todos,

Quisiera aplicar una función f(x) un total de k veces de manera recursiva.
En pseudo código sería algo como

Si k = 1, calcular f(x);
Si k = 2, calcular f(f(x));
Si k = 3, calcular f(f(f(x))).

Al final me gustaria tener una función g cuyos argumentos sean x y el valor
de k. Así,

g(x, k = 2)

daría como resultado f(f(x)).

Cualquier ayuda y/o sugerencia será más que bienvenida.

Muchísimas gracias,
Jorge Velez.-
#
Hola Jorge,

Creo que la función que buscas está del lado de las varias implementaciones
que tiene "R" del lado de la "Programación Funcional".
En particular miraría la función "Reduce()".
Y también la función "accumulate()" del paquete de Hadley Wickham "purr"
(Functional Programming Tools).

Saludos,
Carlos Ortega
www.qualityexcellence.es

El 12 de mayo de 2016, 5:39, Jorge I Velez <jorgeivanvelez en gmail.com>
escribió:

  
    
#
Yo de primeras lo haría así:

f <- function(x) return(x^2)

recursiva <- function(x, fun, k) {
   if (k > 1) return(fun(recursiva(x, fun, k-1))) else return(fun(x))
}

 > recursiva(2,f,1)
[1] 4
 > recursiva(2,f,2)
[1] 16
 > recursiva(2,f,3)
[1] 256
 > f(f(f(2)))
[1] 256

Un saludo,
     Rubén FC


El 12/05/2016 a las 10:29, Carlos Ortega escribió:
#
g <- function(f, x, k){
  for(i in 1:k)
    x <- f(x)
  x
}

g(sqrt, 256, 3)

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com


El 12 de mayo de 2016, 10:40, rubenfcasal <rubenfcasal en gmail.com> escribió: