避免在 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
假设我有一个向量
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