首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的递归for循环

R中的递归for循环
EN

Stack Overflow用户
提问于 2017-07-03 11:28:18
回答 2查看 1.7K关注 0票数 2

我很难对这个递归程序进行编码,并且想知道是否有人可以帮助我。

我想对这个递归方程进行编码:

代码语言:javascript
复制
for k=1,2,...

beta(k)=k-sum_(i=0)^(k-1)Kchoosei*beta(i)*exp(-i(k-i))

我在R中是用手动的方式做的,但是我想把它放在一个函数中。

代码语言:javascript
复制
beta0<-0

beta1<-1-choose(1,0)*beta0*exp(-0*lambdaL*(1-0))
beta2<-2-choose(2,0)*beta0*exp(-0*lambdaL*(2-0))-choose(2,1)*beta1*exp(-1*lambdaL*(2-1))
beta3<-3-choose(3,0)*beta0*exp(-0*lambdaL*(3-0))-choose(3,1)*beta1*exp(-1*lambdaL*(3-1))-choose(3,2)*beta2*exp(-2*lambdaL*(3-2))
beta4<-4-choose(4,0)*beta0*exp(-0*lambdaL*(4-0))-choose(4,1)*beta1*exp(-1*lambdaL*(4-1))-choose(4,2)*beta2*exp(-2*lambdaL*(4-2))-choose(4,3)*beta3*exp(-3*lambdaL*(4-3))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-03 11:42:56

您可以为和定义第二个循环。请注意,这里的索引以1而不是0开始,这将导致“索引转移”。

代码语言:javascript
复制
beta = numeric()
beta[1] <- 0

for (k in 1:10){
  beta[k+1] <- k
  for (i in 0:(k-1))
    beta[k+1] <- beta[k+1] - choose(k, i)*beta[i+1]*exp(-i*(k-i))
}

beta
# [1] 0.000000 1.000000 1.264241 2.080705 3.247551 4.528104 5.748673
# [8] 6.876234 7.941197 8.972749 9.987645
票数 2
EN

Stack Overflow用户

发布于 2017-07-03 12:47:07

我认为您需要两个函数,因为您需要每个以前的beta值作为输入,但是您只需要一个输出。下面是我的建议(为了适应您的lambaL,因为您的帖子有些含糊不清,它适用于LambdaL == 1):

代码语言:javascript
复制
beta_vec <- function(k){
  if(k == 0) 0 else {
    beta_vec_old <- beta_vec(k-1)
    c(beta_vec_old,sum(sapply(0:(k-1),function(i){1-choose(k,i)*beta_vec_old[i+1]*exp(-i*(k-i))})))
}}

beta <- function(k){
  tail(beta_vec(k),1)  
}

# > beta_vec(5)
# [1] 0.000000 1.000000 1.264241 2.080705 3.247551 4.528104
# > beta(5)
# [1] 4.528104

(编辑后输入代码)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44884411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档