2017-08-09 256 views
0

我正在爲使用平均值和樸素方法預測具有少量觀察值的維度的多維數據製作預測模型。R snaive() - 要替換​​的項目數不是替換長度的倍數

我將所有resultst保存到數據框中。當我嘗試這樣做與snaive模型,我得到一個錯誤:

Error in { : task 1 failed - "number of items to replace is not a multiple of replacement length"

這是代碼發生故障的部分:

if(length(timeseries) < 54){ 
     fc.resutl <- meanf(timeseries, h = 20, level = c(80, 95)) 
} else fc.result <- snaive(timeseries, h = 20, level = c(80, 95)) 

fc.result <- as.data.frame(fc.result) 

loop.output <- rbind(loop.output, fc.result) 

我試圖打印從meanf和snaive功能和結果這兩個似乎是在相同的格式:

Point Forecast Lo80 Hi80 Lo95 Hi95

如果我改變既meanf,它工作得很好,所以只有snaive返回錯誤。任何想法可能是什麼問題?

我一行一行地檢查代碼的執行情況,發現錯誤確實在snaive()中。錯誤引用是:

9. 
.cbind.ts(list(e1, e2), c(deparse(substitute(e1))[1L], 
deparse(substitute(e2))[1L]),union = FALSE) 
8. 
Ops.ts(r, tsLag(r, -lag)) 
7. 
diff.ts(y, lag = lag) 
6. 
diff(y, lag = lag) 
5. 
is.data.frame(x) 
4. 
var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) 
3. 
sd(diff(y, lag = lag), na.rm = TRUE) 
2. 
lagwalk(x, lag = frequency(x), h = h, drift = FALSE, level = level, 
    fan = fan, lambda = lambda, biasadj = biasadj) 
1. 
snaive(timeseries, h = 20, level = c(80, 95)) 
+0

請提供一個最小可重現的例子。 –

+0

沒關係,snaive只接受int頻率的時間序列,而我的設置爲每週預測365,25/7。 –

回答

0

聽起來像是你想通了,但你還可以在第2行代碼拼寫錯誤,「fc.resutl」應爲「fc.result」。