2011-08-03 58 views
4

這比R中的任何一個概念問題都更像一個編程。我嘗試過,但我缺乏R的專業知識令我感到沮喪:循環遍歷一個數據幀的行來模擬

我有一個數據幀df與列ID,xR01,xR02,nR01,nR02,xRsum,我想使用超幾何函數來生成模擬數據。這樣做的一個值很簡單:

df$xSim01 = rhyper(1, df$nR01, df$nR02, df$xRsum) 

但我的問題是,如果我申請這上面的表格看起來它給了我所有的20000行的一個值。這讓我覺得如果我遍歷每一行,它可能會正常工作。那麼使用apply或者其他函數最有效率?

我的第二個問題是:
我會想先來模擬這兩個20000行,以獲得第一個模擬數據集,然後將想要獲得的是模擬列的意思是,和存儲在某種程度上意味着和重複模擬N次。如此種類的嵌套循環,並希望找到節省計算時間的有效方法。在R中的正確代碼將不勝感激。由於

dat.sim$xR01 <- rhyper(1, dat.obs$nR01, dat.obs$nR02, dat.obs$xRsum) 

回答

2

的隨機抽獎功能都是矢量:

df$xSim01 = rhyper(20000, df$nR01, df$nR02, df$xRsum) 

replicate反覆這樣做,避免循環。你會想要創建自己的函數來繪製觀察結果並採取其意思。例如:

draw.mean <- function(dat,n) { 
    return(mean(rhyper(n,dat$nR01,dat$nR02,dat$xRsum))) 
} 
replicate(1000,draw.mean(dat=df,n=20000))