我需要帮助弄清楚如何改善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)
}
时,它会给出不同的值。
我在做什么错?我该如何解决?
答案 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])
-家族函数。