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



假设我有一个任意函数

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 = 1bs是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)

最新更新