使用" sample()"形成Wright-Fisher循环。

时间:2016-03-21 17:57:14

标签: r loops

我正在尝试使用help sprintf函数创建一个简单的循环来生成Wright-Fisher模拟遗传漂移(我实际上并没有使用此函数设置死区,但是,在我的天真中,这似乎是正确的方式去)。我知道sample()基于某些概率从矢量中随机选择值。我的目标是创建一个将继续运行的系统,从连续集中进行随机选择。例如,如果它需要一些原始值集并采样第二组,我希望循环从第二组中获取另一个随机样本(使用之前定义的概率)。

我想以非常一般的方式学习如何做到这一点。因此,此时特定概率和元素是任意的。唯一重要的是(1)每个元素都可以重复;(2)根据Wright-Fisher,集合的大小必须在几代人之间保持不变。举个例子,我一直在玩以下内容:

sample()

令人遗憾的是,我的问题是我没有任何代码要分享,因为我不确定如何开始编写这种循环。我知道V <- c(1,1,2,2,2,2) sample(V, size=6, replace=TRUE, prob=c(1,1,1,1,1,1)) 循环用于多次重复一个函数,所以我的猜测就是从那里开始。但是,根据我对这些研究的研究,似乎你必须从一个变量开始(通常是i)。我在这个抽样中没有任何变量,这些变量看起来非常明显;并不是说一个人无法弥补。

1 个答案:

答案 0 :(得分: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