我需要从向量中减去一个数字,以便从元素中连续减去。例如,考虑向量 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/

10-12 20:35