Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用利率向量计算复利_R_Loops_Vectorization - Fatal编程技术网

R 用利率向量计算复利

R 用利率向量计算复利,r,loops,vectorization,R,Loops,Vectorization,我想看看是否有办法对我进行的计算进行矢量化。我寻找这个答案,却找不到我需要的 我有一个增长率向量。每一个代表一个时期(在我的例子中是一年)。我想把这个向量应用到一些本金上。然后,将第一个增长率应用于主体后,使用第一次迭代的结果,并将第二个增长元素应用于新值 下面是一些复制代码(全部在base): 问题在于sapply函数不保存新金额,而是将利率向量应用于相同的初始本金。这实际上是我对这段代码的期望。我不知道如何在元素之间的每次迭代后保存新值 这就是我使用循环解决问题的方法: AmountVect

我想看看是否有办法对我进行的计算进行矢量化。我寻找这个答案,却找不到我需要的

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

下面是一些复制代码(全部在
base
):

问题在于
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
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

可爱。这么简单,完全有道理。谢谢
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
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