在R中迭代复合返回(如Excel产品功能)

时间:2015-01-03 01:23:43

标签: r excel

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

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

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

我试图用for循环来解决这个问题,我认为这是R世界中的禁忌。如果可能的话,我很想听听更好的方式。但是如果需要一个循环,我是否还需要制作一个“帮助”列,我将每个回报率乘以前一个?

谢谢。

1 个答案:

答案 0 :(得分:3)

我认为你正在寻找(矢量化)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

(您可以再次将其输入percent(),以进行相当格式化。)