【发布时间】:2016-11-18 04:25:21
【问题描述】:
假设我有一个要添加的元素向量:
a <- c(1,2,-7,5)
以下是一些额外的测试用例:
a <- c(1,2,-3,5)
a <- c(1,2,-7,-3,5)
我知道我可以使用sum(a) 来获得结果,但是如果我有一个需要注意的条件怎么办:
current_sum = 0
for(i in 1:length(a)){
last_sum = current_sum
current_sum = current_sum + a[i]
if(current_sum < 0)
{
current_sum = last_sum
current_sum = current_sum + (a[i]*-1)
}
}
在这里,每次总和为负时,我们都会返回上一个总和,并加上使总和变为负数的那个数字的相反数。作为第一个示例的结果输出 15
显然,元素的向量事先是未知的,性能是个问题。是否有任何完全矢量化的方法或更有效的方法来做到这一点(避免循环)?
【问题讨论】:
-
您如何从您的描述中得到
5 as a result?你是说 15 岁吗? -
@xxfelixxx 现在假设我有这个向量 a
-
@thelatemail 你是对的,我在 5 之前忘记了 1。我已修复它
-
@Imlerith - 只是
sum(a)适用于这种情况。 -
我认为它类似于
sum(ifelse(cumsum(a) < 0, -a, a)),尽管它并不可靠。
标签: r performance sum conditional-statements add