HoltWinters函数在自身与purrr:map一起使用时工作正常,但在ifelse函数中使用时工作不正常

HoltWinters函数在自身与purrr:map一起使用时工作正常,但在ifelse函数中使用时工作不正常,r,time-series,purrr,holtwinters,R,Time Series,Purrr,Holtwinters,我试图沿着向量迭代使用Holtwiners预测,而不使用循环,但不希望在前两个上使用Holtwiners函数。我已使用累积创建了一个向量列表: 这个 给出了我想要的结果,但不包括前两次迭代。我认为使用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),

我试图沿着向量迭代使用Holtwiners预测,而不使用循环,但不希望在前两个上使用Holtwiners函数。我已使用累积创建了一个向量列表:

这个 给出了我想要的结果,但不包括前两次迭代。我认为使用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)))

为什么会搞砸?

正如Dason在他们的评论中提到的那样,ifelse函数与使用if-else语句不同。前者为x的每个元素返回一个值,假设x是一个包含布尔的向量,例如

x <- c(TRUE, TRUE, FALSE, FALSE)
ifelse (x, "A", "B")

ifelse并不像你想象的那样。明白了-我还意识到使用map_if有一个解决方法。谢谢
# 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]]

#[[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
x <- c(TRUE, TRUE, FALSE, FALSE)
ifelse (x, "A", "B")
hw2 <- map(cumv, function(x) {
    if (length(x) > 2) {
        return (HoltWinters(ts(x),gamma=F,alpha=0.35,beta=0.2))
    } else if (length(x) > 1) {
        return (max(x))
    } else {
        return (NA)
    }
})