Я пытаюсь использовать предсказание 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
Это
дает желаемый результат, но не включает первые две итерации. Я предполагал, что использование ifelse
будет работать нормально:
# 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
Почему все портится?