n次将函数迭代/组合到自身上

时间:2018-11-16 04:05:06

标签: r functional-programming purrr

假设我具有任意功能

foo = function(a,b) {a+b}

如何n将该函数自身迭代一次?

foo(foo(foo(foo(x, 1), 2), 3, 4)

我正在查看purrr:compose,但对于任意n来说并没有希望。 purrr:reduce感觉它也会发挥作用...但是我很沮丧。

2 个答案:

答案 0 :(得分:1)

这是一个纯purrr版本,确实具有功能,正如您所说的reduce在这里派上用场,因为compose只是一个函数,而函数只是可以减少的元素通过组成它们来发挥作用。要只填写一个参数,请使用partial

foo_n <- reduce(map(1:n, ~partial(foo, b=.x)), compose)

答案 1 :(得分:0)

您也可以将每个foo(a,b)函数的结果附加到数字向量中,然后获取最后的结果。

让我们的x = 1b1:4的元素:

x = 1
n = 4

out = vector("numeric")
steps = seq(1, 4, by = 1)

for( b in steps){
  ## initial value
  if (length(out) == 0){

      out = append(out, values = foo(x, b) )
    }else{

      out = append(out, values = foo( tail( out, 1), b) )
    }

}
tail(out, 1)