2017-09-15 106 views
3

我需要从矢量中减去一个数字,以便从元素中连续减去它。作为一个例子,考虑矢量a = c(8, 4)。如果我想连续从这个向量中减去9,我首先从第一个向量元素减去9,即第一个向量元素减去9,第一个元素的值为1,然后从第二个元素中减去。为第二个向量元素留下4-1 = 3。从矢量元素中连续减去

我可以用一堆不雅的if-else语句来做到这一点。一定会有更好的办法。这将更容易显示示例:

我假设串行减法函数被称为serialSub。

a = c(8,4) 
serialSub(a,4) 
> [1] 4 4 

serialSub(a,8) 
> [1] 0 4 

serialSub(a,9) 
> [1] 0 3 

serialSub(a,13) 
> [1] 0 0 

serialSub(a,0) 
> [1] 8 4 

回答

6
如果

tosub减去远的总量,然后pmin(cumsum(a), tosub)是应该从a累积和中的每个元素被除去的总量,因此cumsum(a) - pmin(cumsum(a), tosub)是我们的新向量的累积总和。我们需要获得给出了这样的累计总和,可使用diff要做的载体:

a <- c(8, 4) 
serialSub <- function(a, tosub) diff(c(0, cumsum(a) - pmin(cumsum(a), tosub))) 
serialSub(a,4) 
# [1] 4 4 
serialSub(a,8) 
# [1] 0 4 
serialSub(a,9) 
# [1] 0 3 
serialSub(a,13) 
# [1] 0 0 
serialSub(a,0) 
# [1] 8 4 
+1

或'PMIN(P最高(0,cumsum(一) - V),A)',我想。 – Frank

+2

@Frank不错的一个 - 'pmax(0,cumsum(a)-v)'也适用于所得到的向量的累加和,我喜欢我们可以在'和'之间使用'pmin'的观察'确定要保留什么而不是使用'diff'。 – josliber