R 如何根据索引值求指数衰减率之和

R 如何根据索引值求指数衰减率之和,r,sum,plyr,exponent,R,Sum,Plyr,Exponent,我需要计算一个常数的和,根据一个指数提升到一个幂。例如,如果我的常数是一个速率.5,而索引是4,我想求和.5^1+.5^2+.5^3+.5^4的和,并将这个和分配给一个对象。 因此,我的职能部门将启动以下工作: decay_rate = .5 index_value = 5 expsum<-function(decay_rate, index_value) { decayVector <-rep(decay_rate,index_value) indexp <-seq(1

我需要计算一个常数的和,根据一个指数提升到一个幂。例如,如果我的常数是一个速率.5,而索引是4,我想求和.5^1+.5^2+.5^3+.5^4的和,并将这个和分配给一个对象。 因此,我的职能部门将启动以下工作:

 decay_rate = .5
index_value = 5
 expsum<-function(decay_rate, index_value) { 
decayVector <-rep(decay_rate,index_value)
indexp <-seq(1,index_value)
}
衰减率=.5 索引_值=5 expsum 甚至更短,无需申请或其他任何事项:

sum(decay_rate^(1:index_value))

这里有一个
sapply
方法,尽管正如用户14382所指出的,这个问题不需要循环

> decay <- 0.5 
> index <- 5
> sum(sapply(1:index, function(x) decay^x))
## [1] 0.96875
或使用
mapply

> mapply(expsum, decay = c(0.5, 0.9), index = c(5, 4))
## [1] 0.96875 3.09510

这是一个简单的矢量化解决方案可用的问题。 此处不建议使用循环(或sapply),因为这相对较慢:

> decay_rate = .5
> index_value = 50000
以下是矢量化解决方案:

> system.time(sum(decay_rate^(1:index_value)))
   user  system elapsed 
  0.005   0.000   0.006 
> system.time(sum(sapply(1:index_value, function(x) decay_rate^x)))
   user  system elapsed 
  0.112   0.009   0.139 
下面是一个sapply(循环)类型的解决方案:

> system.time(sum(decay_rate^(1:index_value)))
   user  system elapsed 
  0.005   0.000   0.006 
> system.time(sum(sapply(1:index_value, function(x) decay_rate^x)))
   user  system elapsed 
  0.112   0.009   0.139 

sum(.5**(1:5))
expsum这对我学习使用R编程有很大帮助。user14382解决方案是最有效的,但我非常感谢Scriven给出的解释,它帮助我理解为什么?
> system.time(sum(sapply(1:index_value, function(x) decay_rate^x)))
   user  system elapsed 
  0.112   0.009   0.139