2013-01-15 80 views
0

我正在嘗試編寫for循環,它使用內置函數,在每次運行時更改其參數的值。for循環來更改內置函數的參數的值

內置函數是來自msm包(多階段馬爾可夫模型)的qmatrix.mns。它計算不同階段的轉換率。它的主要論據是:多級馬爾可夫模型(msm.Full)和協變量(在列表中提供)。

我寫了下面的函數(它的工作):

transRate<-function(grossTon,held, cpue){ 
    estim<-data.frame(matrix(rep(0,21),7,3)) 
    for(i in 1:3){ 
    qMatrix<-qmatrix.msm(msm.Full, ci="normal", covariates=list(grossTon=grossTon, held=held, cpue=cpue,period=i)) 

      estim[i]<-qMatrix$estimates[c(5,2,10,7,13,14,15)]# extracts transition rates that I'm interested in 
      rownames(estim)<-c("q12","q21","q23","q32","q14","q24","q34") 
      colnames(estim)<-c("period 1", "period 2","period 3") 
     } 

      return(estim)      
    }      

    transRate(grossTon=10,held=10,cpue=0.5) 

結果是:

period1  period2  period3 
q12 0.011523315 0.01100657 0.01051299 
q21 0.006939337 0.00528312 0.004022193 
q23 0.161752987 0.079884 0.039451841 
q32 0.016379169 0.01661803 0.01686038 
q14 1.134517831 1.13026321 1.126024543 
q24 0.426243172 0.78585263 1.448854529 
q34 0.240552571 0.74682982 2.318639844 

這是很容易的,因爲協 「期間」 有三個可能的值:1,2 ,3,但是當我嘗試使用協變量「grossTon」時,故事是不同的,它的潛在價值在10到120之間。我想要的是總噸值取值10,20,30,...,120。

請看看我做了什麼:

transRate<-function(held, cpue, period){ 
estim<-data.frame(matrix(rep(0,84),7,12)) 
grossT<-c(10,20,30,40,50,60,70,80,90,100,110,120) 
    for(i in grossT){ #I guess the problem is here 
    qMatrix<-qmatrix.msm(msm.Full, ci="normal", covariates=list(grossTon=i, held=held, cpue=cpue,period=period)) 
    estim[i]<-qMatrix$estimates[c(5,2,10,7,13,14,15)] 
    rownames(estim)<-c("q12","q21","q23","q32","q14","q24","q34") 
    colnames(estim)<-c("10","20","30","40","50","60","70","80","90","100","110","120") 

    } 
    return(estim)      
}      

transRate(held=10,cpue=0.5,period=1) 

什麼我期待的是以下的輸出:

10 20 30 40 50 60 70 80 90 100 110 120 
q12            
q21            
q23            
q32            
q14            
q24            
q34 

非常感謝提前。

回答

2

您可以在任何需要的矢量上運行循環。因此:

for (i in seq(10,120,by=10)) 

是一個方法去解決它。在一般情況下,您可以做

for (i in c(10,15,23,50,100,273)) 

或您需要的任何值。