试图优化此代码。速度问题

时间:2016-09-09 12:13:08

标签: r

这段代码给了我我想要的东西,但是对于更大的数据集,它变得非常慢。非常感谢有关如何以更快的速度做同样事情的一些见解。

df = data.frame(v1 = runif(1:15000), v2 = runif(1:15000))

rolling.monthlies = lapply(df, function(x){
  p = sapply(1:length(x), function(i){
    m = rev(x[1:i])
    m = m[seq(1,length(m),21)]
    m = rev(m)
  })
  return(p)
})

1 个答案:

答案 0 :(得分:0)

我们可以像这样使用rev消除两个seq来电。我们也可以使用lapply代替sapply,因为没有简化保存尝试:

set.seed(123) # for reproducibility
df = data.frame(v1 = runif(1:15000), v2 = runif(1:15000)) # input

rolling.monthlies2 = lapply(df, function(x)
  lapply( seq_along(x), function(i) x[seq(i %% 29, i, 29)] )
)