在R中矢量化循环

时间:2015-11-10 13:48:53

标签: r loops vectorization

我有一些名为P_Array的数组有100,000个数据点,需要计算长度为100的子数据的第一阶自相关,即来自1:1002:101等等。我写的一个工作得很好,但很慢的循环。

Tf <- 100000
acf_Array <- rep(0, length.out = Tf-100)  
for (t in 1:(Tf-100)){
  acf_Array[t] <- acf(P_Array[t:(t+100)])$acf[2]
  }

我的想法是使用像

这样的东西
acf_Array[1:(Tf-100)] <- acf(P_Array[(1:(Tf-100)):(101:Tf)])$acf[2]
然而,

不起作用。有什么建议吗?

修改

我认为这会解决问题

  for (t in 1:(Tf-100)){
  acf_Array[t] <- cor(P_Array[t:(t+98)], P_Array[(t+1):(t+99)])
  }

1 个答案:

答案 0 :(得分:0)

要回答有关矢量化for循环的具体问题,这是我的答案:

acf_Array <- sapply(1:Tf-100, function(x) acf(P_Array[x:x+100])$acf[2])

但正如评论中所提到的,速度限制位可能是acf函数。