2017-08-09 253 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”。