如何将循环转换为基于向量的代码?

How do I turn a loop into a vector-based code?

我需要将数据帧拆分为 N 个部分,这些部分应该具有给定的长度 ("proglen")。
我创建了一个 for 循环,它以数据帧列表的形式给出了我想要的结果。 现在我想将 for 循环更改为基于向量的代码

我不确定如何在 R 中将循环转换为基于向量的代码。

obslen = 600 ;proglen = 50 ; N = 50 ; testdat <- list()

for (i in 1:N){ 
  test <- df[df$d >= df$d[obslen + i * proglen] &
                    df$d < df$d[proglen + obslen  +i * proglen],]
  testdat[[i]] <- test
}

变量 $d 的类型为 Posixct。 结果应包含 N 个数据帧。 这些 dfs 从 [obslen + i * proglen] 开始,长度为 "proglen".

这与您所做的几乎相似,只是替换为 lapply 并且更具可读性。这将为您提供数据框列表。这也可以用递归函数来完成,但会很难理解(在我看来)。

lapply(1:N, function(idx){
  this_idx <- obslen + idx * proglen
  next_idx <- obslen + (idx + 1) * proglen
  df[this_idx:next_idx, ]
})

如果日期不同,那么您始终可以使用 split 函数:

testdat <- split(df[obslen + seq(1, N * proglen), ], rep(seq(N), each = proglen))