我需要从向量中减去一个数字,以便从元素中连续减去。例如,考虑向量 a = c(8, 4)
。如果我想从这个向量中连续减去 9,我首先从第一个向量元素 8 中减去 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
最佳答案
如果 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
关于r - 从向量元素中连续减去,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46244588/