在R中迭代化合物返回(如Excel产品function)

我正在尝试编写一个简单的函数来重现Excel中的PRODUCT函数,该函数可用于计算投资回报。 给定一段时期内的回报向量(如下),我想计算整个持有期间的总回报。

library(scales) vec=c(2.1,3.1,5,-2.3,1.7,-9.8) vecpercent=percent(vec/100) 

在Excel中,如果“vecpercent”中的返回在单元格B4到B9中,则这将被计算为如下所示的数组函数:{= 1 + PRODUCT(B4:B9)-1}。这相当于(1 + r1) (1 + r2) …(1 + rn),其中n是周期数。

我试图用一个for循环来解决这个问题,我知道这个循环在R世界是禁忌的。 如果可能,我很乐意听到更好的方法。 但是如果需要一个循环,我是否也需要制作一个“助手”列,将每个回报率与前一个回报率相乘?

谢谢。

我想你正在寻找(vectorized) cumprod函数:

 cumprod(1 + vec / 100) - 1 # [1] 0.0210000 0.0526510 0.1052835 0.0798620 0.0982197 -0.0094058 

如果你只是在寻找最后一个值,你可以使用prod

 prod(1 + vec / 100) - 1 [1] -0.0094058 

(你可以再次inputpercent() ,进行格式化)。