调用函数自己的输出,N次



我想运行一个函数N次,它的输入是它在上次迭代中产生的输出。下面是一个手动示例(N=3):

fun <- function(data) {
x <- data$x
y <- data$y

new_x <- x+y
new_y <- x*y

list(x=new_x, y=new_y)
}

#Initialise:
data <- list(x=2,y=3)
#Run N times:
data <- fun(data)
data <- fun(data)
data <- fun(data)

有没有一种简单/快速的方法来做到这一点,而不使用慢循环?

是否有一种简单/快速的方法来做到这一点

是的,这是一个简单的循环:

N = 3
for(i in 1:N) {
data = fun(data)
}

不使用慢循环?

这并不慢。

R中的循环比向量化操作慢。然而,由于每次迭代都依赖于之前的结果,因此不能对其进行矢量化。使用R的JIT编译,for循环可能比R中隐藏循环的常见方法(如*apply函数)更快。无论如何,很难让大多数*apply函数为连续迭代更新它们的输入,就像这里需要的那样。(JIT编译已经默认启用多年了。)

最新更新