我有一个与这个问题非常相似的问题...
...还有额外的警告,我也需要添加期间贡献。
这是一个循环示例:
# How do I vectorize this?
RateVector <- c(0.02, 0.03, 0.04, 0.05, 0.06, 0.05, 0.04, 0.03, 0.02, 0.01) # forecasted rates
ContributionVector <- c(1,2,3,4,5,6,7,8,9,10) # future contributions
StartingBalance <- 10000
EndingBalance <- StartingBalance
# Compound growth growth calculation loop
for(i in 1:length(RateVector)){
rate <- RateVector[i]
contribution <- ContributionVector[i]
EndingBalance <- (EndingBalance*(1+rate)) + contribution
print(paste(i, EndingBalance))
}
[1] "1 10201"
[1] "2 10509.03"
[1] "3 10932.3912"
[1] "4 11483.01076"
[1] "5 12176.9914056"
[1] "6 12791.84097588"
[1] "7 13310.5146149152"
[1] "8 13717.8300533627"
[1] "9 14001.1866544299"
[1] "10 14151.1985209742"
获得所有值的向量会很好,但我最需要的是最终值(在本例中为14151.1985209742)
我尝试使用 cumprod 和 cumsum 的各种组合,但没有结果。
请注意额外的警告,我试图在每个时期的贡献之前添加复合增长。
提前谢谢您。
sum(rev(cumprod(rev(c(RateVector, 0) + 1))) * c(StartingBalance, ContributionVector))
[1] 14151.2
这里的精度有些问题,但与您的值相差不到一分钱。如果您想要所有值的向量,当前的解决方案将是您的最佳选择。如果您尝试应用上述解决方案来获取该向量(例如,使用
sapply
),它至少是 O(N^2),而我相信您的解决方案是 O(N)。