Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免R/vectorize中的for循环_R_Arrays_For Loop_Vectorization - Fatal编程技术网

避免R/vectorize中的for循环

避免R/vectorize中的for循环,r,arrays,for-loop,vectorization,R,Arrays,For Loop,Vectorization,假设我有一个向量 a <- c(1, 3, 4, 5, 6, 1, 2, 1, 1, 1) 我想创建一个新的向量,它存储第三个元素之后每个元素之前的值之和,如下所示: b <- c(8, 13, 19, 20, 22, 23, 24, 25) 如果没有for循环,我怎么做呢?我们可以在向量和索引上使用cumsum来删除前两个元素 b1 <- cumsum(a)[-(1:2)] b1 #[1] 8 13 19 20 22 23 24 25 我们可以在向量和索引上使用cum

假设我有一个向量

a <- c(1, 3, 4, 5, 6, 1, 2, 1, 1, 1)
我想创建一个新的向量,它存储第三个元素之后每个元素之前的值之和,如下所示:

b <- c(8, 13, 19, 20, 22, 23, 24, 25)
如果没有for循环,我怎么做呢?

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

b1 <- cumsum(a)[-(1:2)]
b1
#[1]  8 13 19 20 22 23 24 25
我们可以在向量和索引上使用cumsum来删除前两个元素

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

另一个带Reduce的base R选项是最简洁的,我相信

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

另一个带Reduce的base R选项是最简洁的,我相信

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

我一直在观察使用Reduce的用户的增加,但我无法找出重新引起兴趣的原因。这主要是我的好奇心,因为它从来都不是我练习的一部分。@alex在base R中,Reduce是一个可以用于递归操作的函数,而无需进入for循环-尽管for循环可能更灵活、更容易理解。除此之外,对于累积和,我更喜欢累积和。当我编辑Reduce时,我没有看到来自Thomasiscoding的答案。我一直在观察使用Reduce的用户的增加,但我无法找出重新引起兴趣的来源。这主要是我的好奇心,因为它从来都不是我练习的一部分。@alex在base R中,Reduce是一个可以用于递归操作的函数,而无需进入for循环-尽管for循环可能更灵活、更容易理解。除此之外,对于累积和,我更喜欢累积和。当我编辑Reduce时,我没有看到来自ThomasIsCoding的答案