R snaive() - 要替换​​的项目数不是替换长度的倍数

时间:2017-08-09 12:56:10

标签: r forecasting

我正在制作多维数据的预测模型,该模型使用均值和朴素的方法来预测具有少量观测值的维度。

我将所有结果保存到数据帧中。当我尝试用snaive模型做到这一点时,我收到一个错误:

  

错误{:任务1失败 - "要替换的项目数不是a   替换长度的倍数"

这是失败的代码部分:

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

1 个答案:

答案 0 :(得分:0)

听起来你想通了,但你的代码第2行也有拼写错误,“fc.resutl”应该是“fc.result”。