我有以下功能。我真的不喜欢我以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。
答案 0 :(得分:0)
试试这个:
x_cumsum<-0;
lapply(x,function(y) x_cumsum<-max(0,x_cumsum+y))
# 0 for your sample input.