如何将循环转换为基于向量的代码?
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))
我需要将数据帧拆分为 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))