假设我有一个任意函数
foo = function(a,b) {a+b}
如何将此函数迭代到自身n
次?
foo(foo(foo(foo(x, 1), 2), 3, 4)
我在看purrr:compose
,但它看起来对任意的n
没有希望。purrr:reduce
感觉它也会发挥作用。。。但我被难住了。
这是一个纯purrr
版本,它真的很实用,正如您所说,reduce
在这里派上了用场,因为compose
只是一个函数,函数只是元素,您可以通过组合它们来减少函数。要只填充一个参数,请使用partial
。
foo_n <- reduce(map(1:n, ~partial(foo, b=.x)), compose)
您还可以将每个foo(a,b)
函数的结果附加到一个数字向量中,然后获取最后一个结果。
假设x = 1
和b
s是1: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)