2016-03-21 33 views
0

我想創建一個簡單的循環來生成遺傳漂移的Wright-Fisher模擬,用sample()函數(我實際上並沒有使用這個函數,但在我的天真中,這似乎是正確的方式)。我知道sample()基於某些概率從矢量中隨機選擇值。我的目標是創建一個系統,繼續運行,從連續集合中隨機選擇。例如,如果它需要一些原始的值集合並對第二個集合進行採樣,我希望循環從第二集合中採用另一個隨機採樣(使用前面定義的概率)。用「sample()」形成Wright-Fisher環

我想只是學習如何以一種非常一般的方式來做到這一點。因此,具體的概率和元素在這一點上是任意的。唯一重要的事情是:(1)每一個元素都可以重複;(2)每個賴特 - 費希爾的集合的大小必須保持不變。舉一個例子,我一直在玩如下:

V <- c(1,1,2,2,2,2)  
sample(V, size=6, replace=TRUE, prob=c(1,1,1,1,1,1)) 

遺憾的是,我的問題是,我沒有任何代碼,但正是因爲分享我不知道如何開始寫這種的循環。我知道for()循環被用來多次重複一個函數,所以我的猜測是從那裏開始。但是,從我研究過的這些內容看來,你必須從一個變量(通常是i)開始。在這個抽樣中,我沒有任何變數顯然明顯;這並不是說不能彌補。

回答

0

如果你想從替代共iter迭代人口抽樣反覆,你可以使用一個for循環:

set.seed(144) # For reproducibility 
population <- init.population 
for (iter in seq_len(iter)) { 
    population <- sample(population, replace=TRUE) 
} 
population 
# [1] 1 1 1 1 1 1 

數據:

init.population <- c(1, 1, 2, 2, 2, 2) 
iter <- 100