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