我正在尝试使用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)。我在这个抽样中没有任何变量,这些变量看起来非常明显;并不是说一个人无法弥补。
答案 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