将迭代依赖于R中先前迭代的循环矢量化
我有以下工作代码:将迭代依赖于R中先前迭代的循环矢量化,r,for-loop,vectorization,lapply,reduce,R,For Loop,Vectorization,Lapply,Reduce,我有以下工作代码: x <- c(10.7, 13.0, 11.4, 11.5, 12.5, 14.1, 14.8, 14.1, 12.6, 16.0, 11.7, 10.6, 10.0, 11.4, 7.9, 9.5, 8.0, 11.8, 10.5, 11.2, 9.2, 10.1, 10.4, 10.5) cusum <- function(x) { s <- NA mn <- mean(x) for (i in seq_al
x <- c(10.7, 13.0, 11.4, 11.5, 12.5, 14.1, 14.8, 14.1, 12.6, 16.0, 11.7, 10.6,
10.0, 11.4, 7.9, 9.5, 8.0, 11.8, 10.5, 11.2, 9.2, 10.1, 10.4, 10.5)
cusum <- function(x) {
s <- NA
mn <- mean(x)
for (i in seq_along(x)) {
if (i == 1)
s[i] <- 0 + x[i] - mn
else
s[i] <- s[i - 1] + x[i] - mn
}
s
}
cusum(x)
x这个特定的迭代不需要循环:只需在x-mean(x)
上使用cumsum
:
对于这个特定的迭代,您不需要循环:只需在x-mean(x)
上使用cumsum
:
@Cettt的答案是最直接的,如果这是需要的,就坚持下去。然而,如果你的观点是你不知道如何向量化一个任意函数,那么
当您的计算依赖于一个值和以前的值时,这是一回事,可以进行矢量化。然而,看起来您的计算依赖于以前的计算,在这种情况下,这完全是另一回事。您的函数似乎是后者,因此尝试如下:
func@Cettt的答案是最直接的,如果这是需要的,就坚持下去。然而,如果你的观点是你不知道如何向量化一个任意函数,那么
当您的计算依赖于一个值和以前的值时,这是一回事,可以进行矢量化。然而,看起来您的计算依赖于以前的计算,在这种情况下,这完全是另一回事。您的函数似乎是后者,因此尝试如下:
func非常感谢您!我是如此专注于拉普拉
/Reduce
和艾尔。以至于我完全错过了卡姆苏姆!非常感谢你!我是如此专注于拉普拉
/Reduce
和艾尔。以至于我完全错过了卡姆苏姆!非常感谢你!我确实会坚持@Cettt的答案,但您的演练非常有教育意义!非常感谢你!我确实会坚持@Cettt的答案,但您的演练非常有教育意义!
cumsum(x - mean(x))
[1] -6.958333e-01 9.083333e-01 9.125000e-01 1.016667e+00 2.120833e+00 4.825000e+00 8.229167e+00 1.093333e+01 1.213750e+01
[10] 1.674167e+01 1.704583e+01 1.625000e+01 1.485417e+01 1.485833e+01 1.136250e+01 9.466667e+00 6.070833e+00 6.475000e+00
[19] 5.579167e+00 5.383333e+00 3.187500e+00 1.891667e+00 8.958333e-01 -1.598721e-14