将lapply应用于书面函数或使用循环

时间:2014-08-08 17:48:06

标签: r

这可能是一个基本的rollapply或循环问题,但我找不到指示rollapply函数或为循环计算表达式的方法

我有一个增长率向量,初始值为100.我想计算增长序列中每个点的值,并获得这个值的向量。鉴于实际增长系列长得多,下面的例子下面的那个是不可能的。

x<-c(0.02,0.01,0.4,0.09,-0.3,0.1)

100*(1+x[1])*(1+x[2])*(1+x[3])*(1+x[4])*(1+x[5])*(1+x[6])#End Value 

a1<-100*(1+x[1])#1st value
a2<-a1*(1+x[2])#2nd value
a3<-a2*(1+x[3])#3rd value
a4<-a3*(1+x[4])#4th value
a5<-a4*(1+x[5])#5th value
a6<-a5*(1+x[6])#6th value

s<-c(a1,a,2,a,3,a4,a,5,a6) #vector of values 

我相信rollapply可以在这里使用,但我不能写函数以获取先前值和下一个顺序创建一个函数,我也不确定是否以及如何将100的初始值合并到函数或在x的beguining处添加它。另外,也许这可以作为循环完成。 (在伪代码中查找函数)

x<-c(0.02,0.01,0.4,0.09,-0.3,0.1)

require(zoo);   
fn<- function(y) {(1+prior x)*(1+next x)}
rollapply(x, 1, fun= fn, fill=NA, align='right')

欢迎任何帮助

1 个答案:

答案 0 :(得分:1)

 x<-c(0.02,0.01,0.4,0.09,-0.3,0.1)

desired <- 100*(1+x[1])*(1+x[2])*(1+x[3])*(1+x[4])*(1+x[5])*(1+x[6])#End Value 
desired
100*tail( cumprod (1+x) , 1)

哦,该死的。我应该先阅读评论。 @ G.Grothendieck已经来过这里了。我想用Reduce来展示如何做到这一点可能很有用:

> 100*Reduce("*", 1+x)
[1] 121.0506