0

我有一个for循环,我需要对参数i传递的不同值进行预测,当Holtwinters Forecast出现错误时,往往优化失败,循环中断。如何让我的代码跳过错误代码并转到下一个 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)
}
4

1 回答 1

0

您可以使用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")})
于 2019-10-24T10:35:51.690 回答