2015-05-17 63 views
3

我試圖使用HoltWinters函數在R中進行大量的時間序列預測。 爲此,我使用了for循環,並在裏面調用函數,並將預測保存在data.frame中。避免for循環中的「優化失敗」R

的問題是,HoltWinters函數的一些結果給出了錯誤,特別是優化錯誤:

Error en HoltWinters(TS[[i]]) : optimization failure 

此錯誤打破循環。

所以我需要的東西就像「嘗試」:如果它可以使HoltWinters功能,它保存預測,否則保存錯誤。

下面的代碼複製問題:

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

其中i < - 產生2的問題。

我需要的是,在這個例子中,「輸出」名單如下:提前

> Outputs 
[[1]] 
    LastReal Forecast 
1 0.5657129 -2.274507 

[[2]] 
    LastReal Forecast 
1 error error 

[[3]] 
    LastReal Forecast 
1 0.4039783 -0.9556881 

感謝。

+1

將'HoltWinters'函數調用包裝到'tryCatch'中。請參閱該函數的幫助文件中的示例。 SO也有一些關於這個問題的文章。 –

回答

1

那天我和HoltWinters遇到了同樣的問題,並使用tryCatch來接受Roman的建議。這不是基於文檔實現的最直觀的方式,但是我發現這個鏈接對理解它非常有幫助:

我的解決方案是建立在該示例的基礎上的。

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() 
result <- list() 

for (i in 1:3) { 
    Outputs[[i]] <- tryCatch({ 
    #You can enter messages to see where the loop is 
    #message(paste("Computing", i)) 
    TS[[i]] <- ts(data[[i]], start = 1, frequency = 12) 
    Function <- HoltWinters(TS[[i]]) 
    TSpredict <- predict(Function, n.ahead = 1)[1] 
    result[[i]] <- 
     data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict) 
    }, 
    error = function(cond) { 
    #message(paste("ERROR: Cannot process for time series:", i)) 
    msg <- data.frame(LastReal = "error", Forecast = "error") 
    return(msg) 
    }) 
} 

而對於輸出

> Outputs 
[[1]] 
    LastReal Forecast 
1 0.4733632 0.5469373 

[[2]] 
    LastReal Forecast 
1 error error 

[[3]] 
    LastReal Forecast 
1 0.8984626 -0.5168826 

您可以使用其他錯誤處理參數,例如finallywarning應對可能出現的其他異常。