我已经定义了一个函数,我想多次重新应用它自己的输出。我试过了
replicate(1000,myfunction)
但意识到这只是将我的函数应用于我的初始输入1000次,而不是每次都将我的函数应用于新输出。实际上我想要的是:
function(function(...function(x_0)...))
1000次以上,能够看到每个阶段的变化。
我之前已将b定义为长度为7的特定向量。
b_0=b
C=matrix(0,7,1000)
for(k in 1:1000){
b_k=myfun(b_(k-1))
}
C=rbind(b_k)
C
这是我想要的正确理念吗?
答案 0 :(得分:3)
纯函数式编程方法,使用Compose
包中的functional
:
library(functional)
f = Reduce(Compose, replicate(100, function(x) x+2))
#> f(2)
#[1] 202
但是这个解决方案不适用于太大的n
!非常有趣。
答案 1 :(得分:3)
你可以使用Reduce。例如
add_two <- function(a) a+2
ignore_current <- function(f) function(a,b) f(a)
Reduce(ignore_current(add_two), 1:10, init=4)
# 24
通常Reduce
期望迭代一组新值,但在这种情况下,我使用ignore_current
删除序列值(1:10
),以便该参数仅用于控制我们重复这个过程的次数。这与
add_two(add_two(add_two(add_two(add_two(add_two(add_two(add_two(add_two(add_two(4))))))))))
答案 2 :(得分:2)
你可以尝试一个递归函数:
rec_func <- function(input, i=1000) {
if (i == 0) {
return(input)
} else {
input <- myfunc(input)
i <- i - 1
rec_func(input, i)
}
}
示例强>
myfunc <- function(item) {item + 1}
> rec_func(1, i=1000)
[1] 1001
答案 3 :(得分:2)
循环在这里工作得很好。
apply_fun_n_times <- function(input, fun, n){
for(i in 1:n){
input <- fun(input)
}
return(input)
}
addone <- function(x){x+1}
apply_fun_n_times(1, addone, 3)
给出了
> apply_fun_n_times(1, addone, 3)
[1] 4