我想运行一个函数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编译已经默认启用多年了。)