【问题标题】:"Optimization failure" in a R loopR循环中的“优化失败”
【发布时间】:2019-10-24 09:09:33
【问题描述】:

我有一个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)
}

【问题讨论】:

  • help("tryCatch")

标签: r time-series forecast holtwinters


【解决方案1】:

您可以使用 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")})

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2012-07-02
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2017-09-26
    相关资源
    最近更新 更多