如何替换 R 中的顺序 for 循环

How to replace sequential for-loops in R

我对 R 编程还是很陌生,我已经阅读了很多关于替换 for 循环的文章,尤其是 apply 函数,这对提高我的代码效率非常有用。然而,在我试图创建的一些程序中,我有 for 循环,其中每个循环都必须按顺序执行,因为一个循环的效果会影响下一个循环中发生的事情,据我所知请注意,这无法通过 lapply() 等实现。这种 for 循环的一个例子:

p <- 1

for (i in 1:x) {
  p <- p + sample(c(1, 0), prob = c(p, 1), size = 1)
}

有没有办法替换这种循环?

感谢大家的抽空!

我认为使用 lapply 总能使您的代码更高效,这是一个小小的神话。它可以使您的代码更易于阅读和理解,但不一定更快:

> system.time(for(i in 1:10000000) x <- i )
   user  system elapsed 
  1.712   0.035   1.759 
> system.time(lapply(1:10000000, function(i) x <- i ))
   user  system elapsed 
 13.941   0.414  14.464 

在这种情况下,您的代码看起来非常简单明了。那么,是否有理由摆脱 for 循环?

这种逻辑被称为reduction or fold. Consequently it’s solved not by lapply (or similar), which is an example of a mapping,但是Reduce

p = Reduce(function (a, b) a + sample(c(1, 0), prob = c(a, 1), size = 1),
           seq_len(x), initial_value)

请注意,在这种情况下未使用参数 b — 这对应于您的循环变量 i,同样未使用。