在没有特定元素和变化索引的向量中求和元素

时间:2015-10-14 16:10:50

标签: r

我想在向量中计算每个元素的总和而没有特定的元素。要删除的元素将在每次计算时更改。

快速举例:

vect <- c(1, 1, 2, 3)

我想要的是:

for (i in 1:length(vect)){
    print(sum(vect[-i]))
}

但是我想避免for循环,因为它们很慢。 任何具有apply函数或矢量化计算的解决方案?

3 个答案:

答案 0 :(得分:3)

这些都太复杂了。

sum(vect) - vect
# [1] 6 6 5 4

是你想要的。

除元素之外的向量之和是(向量之和) - (元素)。

答案 1 :(得分:2)

您可以按如下方式使用colSums

rev(colSums(matrix(rep(a,3),3)))

结果

> rev(colSums(matrix(rep(a,3),3)))
[1] 6 6 5 4

答案 2 :(得分:1)

另一种方法是来自rollsum的{​​{1}}。它应该很快(不像@Gregor的解决方案那么快,但应该击败所有其他解决方案)。

library(RcppRoll)

基准

library(RcppRoll)
head(roll_sum(c(vect, vect), k=3),-1)[-1]
#[1] 6 6 5 4

无法完成@ Flo0的解决方案,因为我收到了分配37 GB大小的矢量的错误。