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