我需要从矢量中减去一个数字,使其从元素中被连续地减去.例如,考虑向量a = c(8, 4).如果我想从这个向量中连续减去9,我首先从第一个向量元素中减去9,即第一个元素为0,提示为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
Run Code Online (Sandbox Code Playgroud)
如果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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |