2016-03-21 3 views
0

Ich versuche eine einfache Schleife zu erstellen, um eine Wright-Fisher-Simulation der genetischen Drift mit der sample()-Funktion zu erzeugen (ich bin eigentlich nicht tot auf diese Funktion eingestellt) , aber in meiner Naivität scheint es der richtige Weg zu sein). Ich weiß, dass sample() nach dem Zufallsprinzip Werte aus einem Vektor basierend auf bestimmten Wahrscheinlichkeiten auswählt. Mein Ziel ist es, ein System zu erstellen, das weiterläuft und zufällige Auswahlen aus aufeinanderfolgenden Sätzen vornimmt. Wenn zum Beispiel einige ursprüngliche Werte verwendet werden und eine zweite Menge abgetastet wird, möchte ich, dass die Schleife eine weitere Stichprobe aus der zweiten Menge nimmt (unter Verwendung der Wahrscheinlichkeiten, die zuvor definiert wurden).Bilden einer Wright-Fisher-Schleife mit "sample()"

Ich möchte nur lernen, wie man das auf eine sehr allgemeine Weise tut. Daher sind die spezifischen Wahrscheinlichkeiten und Elemente an diesem Punkt willkürlich. Die einzigen Dinge, die wichtig sind, sind (1) dass jedes Element wiederholt werden kann und (2) die Größe der Menge muss über Generationen hinweg konstant bleiben, laut Wright-Fisher. Ein Beispiel habe ich mit folgendem gespielt:

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

leider mein Problem ist, dass ich, weil ich nicht sicher keinen Code haben noch genau zu teilen bin, wie diese Art zu Schreiben beginnen der Schleife. Ich weiß, dass for() Loops verwendet werden, um eine Funktion mehrmals zu wiederholen, so ist meine Vermutung, dort zu beginnen. Nach dem, was ich über sie recherchiert habe, scheint es, dass Sie mit einer Variablen beginnen müssen (normalerweise ich). Ich habe bei dieser Stichprobe keine Variablen, die offensichtlich offensichtlich sind; was nicht heißen soll, man könne nicht erfunden werden.

Antwort

0

Wenn Sie wiederholt Probe aus einer Population mit Ersatz für insgesamt iter Iterationen wollten, könnten Sie eine for Schleife verwenden:

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 

Daten:

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