我有一个for循环,在这个循环中,我需要对参数I传递的不同值进行预测,当Holtwents预测中出现错误时,通常是优化失败,循环就会中断。我如何才能让我的代码跳过错误代码,转到下一个I并继续循环中的操作。例如,如果我运行下面的代码,当I=2时,循环将被错误中断:HoltWinters中的错误(TS[[i]](:优化失败
我需要的是,当发现错误时,它会自动移动到I=3并继续操作,而不是被中断,就像C++中的"继续"一样
有人能帮忙吗?
谢谢。
data <- list()
data[[1]] <- rnorm(36)
data[[2]] <-
c(
24,24,28,24,28,22,18,20,19,22,28,28,28,26,24,
20,24,20,18,17,21,21,21,28,26,32,26,22,20,20,
20,22,24,24,20,26
)
data[[3]] <- rnorm(36)
TS <- list()
Outputs <- list()
for (i in 1:3) {
TS[[i]] <- ts(data[[i]], start = 1, frequency = 12)
Function <- HoltWinters(TS[[i]])
TSpredict <- predict(Function, n.ahead = 1)[1]
Outputs[[i]] <-
data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict)
}
您可以使用tryCatch跳过带有错误的迭代。
for (i in 1:3)
tryCatch({
TS[[i]] <- ts(data[[i]], start = 1, frequency = 12)
Function <- HoltWinters(TS[[i]])
TSpredict <- predict(Function, n.ahead = 1)[1]
Outputs[[i]] <-
data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict)
}, error=function(e){})
如果你想在失败的迭代中显示错误消息并运行整个代码,你可以使用:
for (i in 1:3)
tryCatch({
TS[[i]] <- ts(data[[i]], start = 1, frequency = 12)
Function <- HoltWinters(TS[[i]])
TSpredict <- predict(Function, n.ahead = 1)[1]
Outputs[[i]] <-
data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict)
}, error=function(e){cat("ERROR :",conditionMessage(e), "n")})