2015-01-03 76 views
1

我正在嘗試編寫一個簡單的函數,該函數可以在Excel中重現PRODUCT函數,該函數可用於計算投資回報。給定一段時間內的回報向量(如下所示),我想計算整個持有期間的總回報。R中的迭代複合返回(如Excel產品功能)

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.This是相當於(1 + r1)(1 + r2) ...(1 + rn),其中n是週期數。

我試圖用for循環來解決這個問題,我認識到這是在R世界中的禁忌。如果可能,我很樂意聽到更好的方法。但是如果需要一個循環,我是否也需要製作一個「助手」列,以便將每個回報率與前一個回報率相乘?

謝謝。

+0

在這種情況下,沒有關於for-loops的禁忌。 R不支持隨機計算,只要預分配並且不使用浪費操作,for循環就可以正常工作。 –

回答

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(),以獲得相當的格式。)

+0

沒問題。另外,由於您熟悉Excel,因此我建議您考慮使用R data.frames。這是這種列式工作的完美數據結構。 – flodel