2014-02-07 78 views
0

我試圖執行一個列表resample使用for循環在R中生成一個數據框,記錄每個試驗的輸出。錯誤輸出文件中的for循環在r

我得到的for循環到沒有錯誤的工作,但我肯定我犯了一個錯誤的地方,因爲我不應該得到的第j個條目,我得到的可能結果的結果。

這裏是我如何生成我的列表:

set1=rep(0,237) # repeat 0's 237 times 
set2=rep(1,33) # repeats 1s 33 times 
aa=c(set1,set2) # put the two lists together 
table(aa) # just a test count to make sure I have it set up right 

現在我要帶大小j的隨機樣本集合了AA和記錄多少0和1的我一次比一次我執行這項任務(讓我們說n次試驗)。

下面是我已經將它設置:

n=1000 
j=27 
output=matrix(0,nrow=2,ncol=n) 
for (i in 1:n){ 
    trial<-sample(aa,j,replace=F) 
    counts=table(trial) 
    output[,i]=counts 
} 

檢查輸出,

table(output[1,]) 
     # 17 18 19 20 21 22 23 24 25 26 27 
     1 1 9 17 46 135 214 237 205 111 24 

    table(output[2,]) 
    # 1 2 3 4 5 6 7 8 9 10 27 
     111 205 237 214 135 46 17 9 1 1 24 

我不認爲我正在從分佈爲j個值正確的答案(中這種情況27)對於期望的0或1的數目(應該接近於0,與它返回的高數目相反)。

任何有關我哪裏出錯的建議將不勝感激。

回答

3

如果您只有0 s在triallength(counts)==1並且當您分配給output時該值將被回收。試試這個:

for (i in 1:n){ 
    trial<-sample(aa,j,replace=F) 
    trial <- factor(trial, levels=0:1) 
    counts=table(trial) 
    output[,i]=counts 
} 

當然,你可以更有效地利用rhyper

table(rhyper(1000, table(aa)[1], table(aa)[2], 27)) 
+0

謝謝你,幫助理解錯誤。 – user3285853

+0

呵呵,rhyper確實是黑魔法!再次感謝羅蘭。 – user3285853

+0

@ user3285853沒有魔法參與。只是基本的統計。 – Roland