嵌套的for循环是否适用?

时间:2018-08-09 19:53:14

标签: r for-loop apply sapply

我需要帮助弄清楚如何改善textsearch循环。它不一定必须是for,我只是认为这是在StackOverflow上研究它的最好方法。我尝试按照在StackOverflow上找到的指南进行操作,但是我是一个新手,并且我对apply函数没有很好的了解。

这是我要更改的代码段的重构:

apply

我尝试执行以下操作:

for (j in 1:NROW(teste2) {
  for (z in 1:NROW(teste2)) {
        if(is.na(teste2$DATE[z]==Sys.Date()+j-1) | z==NROW(teste2)){
          teste2$SALDO[z] <- 0
        }else{
            if(teste2$SALDO[z]!=0 & teste2$DATE[z]==Sys.Date()+j-1){
              teste2$SALDO[z+1] <- teste2$PREVISAO_FINAL2[z] + teste2$SALDO[z+1]
          }else{
            teste2$SALDO[z] <- teste2$SALDO[z]
          }
        }
}

但是当我运行for (j in 1:NROW(teste2) { rows = 1:NROW(teste2) saldo_fn <- function(z){ return(if(is.na(teste2$DATE[z]==Sys.Date()+j-1) | z==NROW(teste2)){ teste2$SALDO[z] <- 0 }else{ if(teste2$SALDO[z]!=0 & teste2$DATE[z]==Sys.Date()+j-1){ teste2$SALDO[z+1] <- teste2$PREVISAO_FINAL2[z] + teste2$SALDO[z+1] }else{ teste2$SALDO[z] <- teste2$SALDO[z] } }) } teste2$SALDO <- sapply(rows, saldo_fn) } 时,它会给出不同的值。

我在做什么错?我该如何解决?

1 个答案:

答案 0 :(得分:0)

您不能使用apply系列功能来优化算法。原因是该行:

teste2$SALDO[z+1] <- teste2$PREVISAO_FINAL2[z] + teste2$SALDO[z+1]

您正在基于当前元素的值递归地更改下一个元素的值。

可以通过使用递归来避免for循环,即,如果您看到类似x[i+1] = x[i+1] + x[i]的内容,则应该使用for循环或递归函数(我更喜欢{{1 }}-循环更容易,并且调用堆栈溢出没有问题),如果您看到类似for的内容,其中F是某些函数,则可以使用z[i] = F(x[i], y[i])-家族函数。