2017-07-04 147 views
0

我在努力研究如何在R中編寫這個和;我猜測我們可以使用for循環,但不能讓我的頭繞過它。在一個for循環中求和R

我試圖代碼的等式爲:

正\ sum_ {K = 0}^{N - 1}選擇第(n-1,K)beta_k EXP(K 大號 NK)對於n = 1,2,...

Math Latex formula

其中:

  1. beta_k是我已經有的向量
  2. L是一個常數。

我已經手動編碼這個,但想把它放到某種for循環中。

mu3<-3-choose(2,1)*beta1*exp(-1*lambdaL*(3-1))-choose(2,2)*beta2*exp(-2*lambdaL*(3-2)) 
mu4<-4-choose(3,1)*beta1*exp(-1*lambdaL*(4-1))-choose(3,2)*beta2*exp(-2*lambdaL*(4-2))-choose(3,3)*beta3*exp(-3*lambdaL*(4-3)) 
mu5<-5-choose(4,1)*beta1*exp(-1*lambdaL*(5-1))-choose(4,2)*beta2*exp(-2*lambdaL*(5-2))-choose(4,3)*beta3*exp(-3*lambdaL*(5-3))-choose(4,4)*beta4*exp(-4*lambdaL*(5-4)) 

lambdaL<-0.5 

這是我的名單公測的

betarec(10,0.5) 
[1] 0.0000000 1.0000000 0.7869387 1.0278660 1.5510843 2.3702034 3.4694342 
4.7718938 
[9] 6.1685468 7.5667952 8.9154479 

謝謝!

+0

這不是差不多了,你[問昨天(問題https://stackoverflow.com/questions/44884411/recursive-for-環中-R /)?你嘗試過什麼循環? –

+0

我試圖使用這個[資源](http://www.codecogs.com/latex/eqneditor.php)添加一個數學膠乳圖像。 [Math Stack Exchange](https://math.stackexchange.com/)上使用的MathJax不幸在StackOverflow中無法呈現。根據需要移除或調整。 – Parfait

回答

0

考慮一個嵌套申請呼叫與mapply迭代地傳遞Ñķ參數傳遞給嵌入sapply遍歷所有連續的測試版從1到當前ķ和迭代地求和的結果。

輸入

lambdaL <- 0.5 
beta <- c(0.0000000,1.0000000,0.7869387,1.0278660,1.5510843,2.3702034, 
      3.4694342,4.7718938,6.1685468,7.5667952,8.9154479) 

當前版本

mu3<-3-choose(2,1)*beta[1]*exp(-1*lambdaL*(3-1))-choose(2,2)*beta[2]*exp(-2*lambdaL*(3-2)) 
mu3 
# [1] 2.632121 
mu4<-4-choose(3,1)*beta[1]*exp(-1*lambdaL*(4-1))-choose(3,2)*beta[2]*exp(-2*lambdaL*(4-2))-choose(3,3)*beta[3]*exp(-3*lambdaL*(4-3)) 
mu4 
# [1] 3.418404 
mu5<-5-choose(4,1)*beta[1]*exp(-1*lambdaL*(5-1))-choose(4,2)*beta[2]*exp(-2*lambdaL*(5-2))-choose(4,3)*beta[3]*exp(-3*lambdaL*(5-3))-choose(4,4)*beta[4]*exp(-4*lambdaL*(5-4)) 
mu5 
# [1] 4.405454 

環路版本(輸出相當於前一版本)

mu_formula <- function(n,k) { 
    n + sum(sapply(seq(k), function(i) 
      -choose((n-1),i)*beta[i]*exp(-i*lambdaL*(n-i)))) 
} 

mu_vector <- setNames(mapply(mu_formula, 3:5, 2:4), paste0("mu", 3:5)) 
mu_vector 
#  mu3  mu4  mu5 
# 2.632121 3.418404 4.405454 

mu_list <- setNames(Map(mu_formula, 3:5, 2:4),paste0("mu", 3:5))  
mu_list 
# $mu3 
# [1] 2.632121 

# $mu4 
# [1] 3.418404 

# $mu5 
# [1] 4.405454 

廣義循環(所有測試版)

mu_list <- setNames(Map(mu_formula,seq_along(beta)[-1]+1,seq_along(beta)[-1]), 
        paste0("mu",seq_along(beta)[-1]+1)) 
mu_list 

# $mu3 
# [1] 2.632121 

# $mu4 
# [1] 3.418404 

# $mu5 
# [1] 4.405454 

# $mu6 
# [1] 5.507972 

# $mu7 
# [1] 6.640989 

# $mu8 
# [1] 7.756735 

# $mu9 
# [1] 8.840919 

# $mu10 
# [1] 9.896983 

# $mu11 
# [1] 10.93315 

# $mu12 
# [1] 11.95646