2017-09-15 103 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