用利率和贡献向量向量化计算复利

问题描述 投票:0回答:1

我有一个与这个问题非常相似的问题...

用利率向量计算复利

...还有额外的警告,我也需要添加期间贡献。

这是一个循环示例:

# 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 的各种组合,但没有结果。

请注意额外的警告,我试图在每个时期的贡献之前添加复合增长。

提前谢谢您。

r loops vectorization
1个回答
0
投票
sum(rev(cumprod(rev(c(RateVector, 0) + 1))) * c(StartingBalance, ContributionVector))

[1] 14151.2

这里的精度有些问题,但与您的值相差不到一分钱。如果您想要所有值的向量,当前的解决方案将是您的最佳选择。如果您尝试应用上述解决方案来获取该向量(例如,使用

sapply
),它至少是 O(N^2),而我相信您的解决方案是 O(N)。

© www.soinside.com 2019 - 2024. All rights reserved.