【问题标题】:R: How can I replace the for loop (`cumsum with condition`) below with apply function? [duplicate]R:如何用 apply 函数替换下面的 for 循环(`cumsum with condition`)? [复制]
【发布时间】:2018-06-17 16:36:08
【问题描述】:

我有以下功能。我真的不喜欢我以 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 函数,但有一个条件是只要它小于0,就会将x_cumsum 重置为0。

【问题讨论】:

标签: r


【解决方案1】:

试试这个:

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

【讨论】:

  • 对不起,我的函数只返回 1 个值。它使用我上面的示例输入返回值1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多