Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将迭代依赖于R中先前迭代的循环矢量化_R_For Loop_Vectorization_Lapply_Reduce - Fatal编程技术网

将迭代依赖于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