"Optimization failure" 在 R 循环中

"Optimization failure" in a R loop

我有一个for循环,其中我需要对参数i传递的不同值进行预测,当Holtwinters Forecast出现错误时,经常优化失败,循环中断。我怎样才能让我的代码跳过错误的代码并转到下一个 i 并继续循环中的操作。 例如,如果我 运行 下面的代码,当 i=2 时循环将被错误中断: HoltWinters(TS[[i]]) 中的错误:优化失败

我需要的是当发现错误时,它会自动移动到i=3并继续操作而不是被中断,就像C++中的"continue"

有人可以帮忙吗?

谢谢。

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")})