R:如何用apply函数替换下面的for循环(`cumsum with condition`)?

时间:2018-06-17 16:36:08

标签: r

我有以下功能。我真的不喜欢我以for循环的形式表达它的事实。是否可以使用apply函数表达它?

请注意,x只是一个向量,如下所示。

c(0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, -1, -1, 1, -1, 0, 0, 0, 0, -1, 0, -1, -1, 0, 0, 0, 0, 1, 0, -1, -1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0)

testing <- function(x){
  x_cumsum <- 0
  for(i in 1:length(x)){
    x_cumsum = x_cumsum + x[i]
    if(x_cumsum < 0){
      x_cumsum = 0
    }    
  }
  return(x_cumsum)
}

请注意,这与cumsum函数类似,但有一个条件会在x_cumsum小于0时将public class DeserializeCtorAttribute : Attribute { }重置为0。

1 个答案:

答案 0 :(得分:0)

试试这个:

x_cumsum<-0;
lapply(x,function(y) x_cumsum<-max(0,x_cumsum+y))
# 0 for your sample input.