R滚动减法矢量化替代for循环

R rolling subtraction vectorized alternative to a for loop

Leaves<- c(2,4,6,7,8,10,11,15)
ax<- c(2,1,1,2,3,1,1,1)
bx <- c(0,0,0,0,2,0,0,1) 
mydata<- data.frame(Leaves, ax, bx)
Sx<- c()
Sx[1] <- sum(x$ax)
for(i in 2:length(mydata$Leaves)){     
  Sx[i] <- Sx[i-1] - mydata$ax[i-1]
}

这里发生的事情是我希望 Sx 列的第一个值是 ax 列的总和。 Sx的第二个值应该是Sx[1]-ax[1],Sx的第三个值应该是Sx[2]-ax[2,等等。

此代码现在可以运行,但它是一个 for 循环。有谁知道一种方法来制作这个 for 循环的矢量化替代方案?我仔细研究了 Dplyr 滞后和 data.table 移位函数,但我不确定如何让它们起作用。

矢量化方式为:

mydata$Sx <- sum(mydata$ax) - cumsum(mydata$ax) + mydata$ax
mydata

#  Leaves ax bx Sx
#1      2  2  0 12
#2      4  1  0 10
#3      6  1  0  9
#4      7  2  0  8
#5      8  3  2  6
#6     10  1  0  3
#7     11  1  0  2
#8     15  1  1  1