我想在向量中计算每个元素的总和而没有特定的元素。要删除的元素将在每次计算时更改。
快速举例:
vect <- c(1, 1, 2, 3)
我想要的是:
for (i in 1:length(vect)){
print(sum(vect[-i]))
}
但是我想避免for循环,因为它们很慢。
任何具有apply
函数或矢量化计算的解决方案?
答案 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大小的矢量的错误。