避免在 R/vectorize 中循环

Avoid for loops in R/ vectorize

假设我有一个向量

a <- c(1, 3, 4, 5, 6, 1, 2, 1, 1, 1)

我想创建一个新向量,它存储第 3 个元素之后每个元素之前的值的总和,如下面的向量:

b <- c(8, 13, 19, 20, 22, 23, 24, 25)

如果没有 for 循环,我如何做到这一点?

我们可以在 vector 和索引上使用 cumsum 来删除前两个元素

b1 <- cumsum(a)[-(1:2)]
b1
#[1]  8 13 19 20 22 23 24 25

或者另一种选择是Reduce

b1 <- Reduce(`+`, a, accumulate = TRUE)[-(1:2)]

另一个带 Reduce 的基本 R 选项(我相信 是最简洁的选项)

> tail(Reduce(`+`,a,accumulate = TRUE),-2)
[1]  8 13 19 20 22 23 24 25