【发布时间】:2018-03-20 20:04:36
【问题描述】:
我编写了一个函数来模拟遗传漂变,我想在 t(世代数)的各种值上循环它,但是每当我这样做时,我都会收到以下错误:
locifreq<-runif(49, .4, 0.8)
gen<-1:100
for (i in 1:length(gen)){
pop[i]<-lapply(locifreq,wright.fisher,3000,200,gen[i])
}
Error in `[<-`(`*tmp*`, i, j, value = rbinom(1, 2 * N, prob = k[i - 1, :
subscript out of bounds
我认为这是因为我的函数无法生成适当的矩阵,或者它无法访问列表中的矩阵(尽管我可能完全错了!),但是我不确定如何解决这个问题,因为每次尝试都会导致错误的下标数量。
我的函数代码如下
wright.fisher<-function(p,Ne,nsim,t){
N <-Ne/2
NA1 <- 2*N*p
NA2 <- 2*N*(1-p)
k <- matrix(0, nrow = t, ncol = nsim)
k[1,] <- rep(NA1, nsim)
for (j in 1:nsim) {
for (i in 2:t) {
k[i, j] <- rbinom(1, 2*N, prob = k[i-1, j] / (2*N))
}
}
k <- as.matrix(k/(2*N))
t(k)
}
有谁知道如何解决这个问题?
【问题讨论】:
-
在第一个循环中,i=1,您正在传递 gen[1]=t=1,并且 k 被定义为 1 行和 nsim 列,但您正在尝试为 k 赋值[2,1] 不存在。