我正在尝试HoltWinters
沿向量迭代地使用预测,而不使用循环,但不希望HoltWinters
在前两个上使用该函数。我使用以下方法创建了一个向量列表accumulate
:
library(purrr)
v <- c(73,77,71,73,86,87,90)
cumv <- accumulate(v,c)
使用map
跨cumv
:
# Omit first two
hw1 <- map(cumv[-c(1:2)], function(x) HoltWinters(ts(x),gamma=F,alpha=0.35,beta=0.2))
> hw1[[5]]
#Holt-Winters exponential smoothing with trend and without seasonal component.
#Call:
#HoltWinters(x = ts(x), alpha = 0.35, beta = 0.2, gamma = F)
#Smoothing parameters:
# alpha: 0.35
# beta : 0.2
# gamma: FALSE
#Coefficients:
# [,1]
#a 89.605082
#b 3.246215
这给出了我想要的结果,但不包括前两次迭代。我认为 usingifelse
可以正常工作:
# Include first two, use ifelse
hw2 <- map(cumv, function(x) ifelse(length(x)>2,HoltWinters(ts(x),gamma=F,alpha=0.35,beta=0.2),
ifelse(length(x)>1,max(x),NA)))
现在,hw2[[7]]
应该(我认为)返回一个相同的对象,hw1[[5]]
但它没有。
> hw2[[7]]
#[[1]]
#Time Series:
#Start = 3
#End = 7
#Frequency = 1
# xhat level trend
#3 81.00000 77.00000 4.000000
#4 80.80000 77.50000 3.300000
#5 80.82400 78.07000 2.754000
#6 85.75192 82.63560 3.116320
#7 89.39243 86.18875 3.203686
为什么会变得一团糟?