如何替换 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
,同样未使用。
我对 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
,同样未使用。