我需要根据索引计算一个常数加到一个幂的总和。例如,如果我的常量是速率.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)
}
“我想将decayvector和indexp结合起来就像一个sumproduct,除了decayVector值将是exponents 如果有一种方法可以使用Plyr或sapply等来创建它......这将是很棒的。
答案 0 :(得分:2)
decay_rate = .5
index_value = 5
decind = function(rate, index){
iv = 1:index
sum(rate^iv)
}
decind(decay_rate, index_value)
[1] 0.96875
甚至更短,无需申请或任何其他内容:
sum(decay_rate^(1:index_value))
答案 1 :(得分:0)
这是一个sapply
方法,尽管如用户14332所指出的那样,此问题不需要循环。
> decay <- 0.5
> index <- 5
> sum(sapply(1:index, function(x) decay^x))
## [1] 0.96875
如果您希望功能快速执行此操作,只需将功能调整为
即可> expsum <- function(decay, index){
sum(decay^seq(index))
}
然后您可以在单个衰减率上使用它,单个索引为
> expsum(0.5, 5)
## [1] 0.96875
> expsum(0.9, 4)
## [1] 3.0951
或使用mapply
> mapply(expsum, decay = c(0.5, 0.9), index = c(5, 4))
## [1] 0.96875 3.09510
答案 2 :(得分:0)
这是一个简单的矢量化解决方案可用的问题。 这里不建议使用循环(或者是sapply),因为这相对较慢:
> decay_rate = .5
> index_value = 50000
这是一个矢量化解决方案:
> system.time(sum(decay_rate^(1:index_value)))
user system elapsed
0.005 0.000 0.006
这是一个sapply(循环)类型的解决方案:
> system.time(sum(sapply(1:index_value, function(x) decay_rate^x)))
user system elapsed
0.112 0.009 0.139