r - 用利率向量计算复利

标签 r loops vectorization

我正在尝试查看是否有办法对我执行的计算进行矢量化。我搜索了这个答案,但找不到我需要的东西。

我有一个增长率向量。每一个代表一个时期(在我的例子中是一年)。我想将此向量应用于一些本金。然后,在将第一个增长率应用于主体后,使用第一次迭代的结果并将第二个增长元素应用于新值。

这里有一些复制代码(全部在base中):

# Vector of interest or inflation rates
RateVector <- c(0.02, 0.03, 0.04, 0.05, 0.06, 0.05, 0.04, 0.03, 0.02, 0.01) # forecasted rates
Principal <- data.frame(Principal = 1000000) # actual value of indicator in most recent period as data frame (list)

这是我对矢量化的尝试:

sapply(Principal, "*", 1 + cumsum(RateVector))

问题在于 sapply 函数不会保存新的金额,而是将利率向量应用于相同的初始本金。这实际上是我对这段代码的期望。我不知道如何在每次迭代后从一个元素到另一个元素保存新值。

这就是我使用循环解决问题的方法:

AmountVector <- Principal # initialize output vector

# Compound growth growth calculation loop
for(i in 1:length(RateVector)){
  Principal = Principal * (1 + RateVector)[i]
  AmountVector <- rbind(AmountVector,Principal)
}

# Print result
AmountVector

最佳答案

这是一个“累积产品”,所以 ?cumprod 是你需要的:

1000000 * cumprod(1 + RateVector)
# [1] 1020000 1050600 1092624 1147255 1216091 1276895 1327971 1367810 1395166
#[10] 1409118

cbind(AmountVector, newresult = 1000000 * c(1, cumprod(1 + RateVector)))
#   Principal newresult
#1    1000000   1000000
#2    1020000   1020000
#3    1050600   1050600
#4    1092624   1092624
#5    1147255   1147255
#6    1216091   1216091
#7    1276895   1276895
#8    1327971   1327971
#9    1367810   1367810
#10   1395166   1395166
#11   1409118   1409118

关于r - 用利率向量计算复利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593439/

相关文章:

arrays - 如何迭代数组一定次数?

java - 循环对象私有(private)数组

python - 有没有办法用 numpy 向量化条件和?

r - tidyverse 中的条件 ntile

java - 简单的java循环写入数据库会导致内存不足异常

python - R 或 Python 中的 CHAID 决策树

arrays - 一维向量与三维数组相乘求和的向量化

r - 如何矢量化这个循环?将两个矩阵相乘,存储信息,多次执行此操作而不循环

html - 使用 R 和 XPath,如何从结果中删除格式元素,例如\n 和\t?

r - 将多个对齐的绘图放置在一页上时避免浪费空间