我正在R中运行一些模拟,为此我使用for循环。
我的代码如下:
clupeaformis_aligned<-read.FASTA("Coregonus clupeaformis_aligned.fas")
clupeaformis_haplo<-haplotype(clupeaformis_aligned)
set.seed(1)
iter <- 1000
clupeaformis_invest <- rep(NA, iter)
ptm <- proc.time()
for(i in 1:iter){
clupeaformis_haplo_rand <- haploAccum(clupeaformis_aligned, method="random", permutations=1000)
N <- clupeaformis_haplo_rand$sequences
H <- clupeaformis_haplo_rand$n.haplotypes
d <- data.frame(N, H)
clupeaformis_lm <- lm(log(H) ~ log(N), data = d)
clupeaformis_nls <- nls(H ~ a*N^b, start=list(a=exp(coef(clupeaformis_lm)[1]), b=coef(clupeaformis_lm)[2]), data = d)
clupeaformis_invest[i] <- invest(clupeaformis_nls, y0 = 21, interval = "inversion", upper = 1000000)
}
proc.time() - ptm.
通过1000次迭代,循环运行大约需要7分钟,但是需要10,000次迭代,大约需要70分钟!我相信nls可能是罪魁祸首,因为迭代过程是一项昂贵的功能。
我正在考虑使用像lapply这样的替代品,但我认为它不比for循环更有效。是否有更好的替代方案需要花费一小部分时间进行大量迭代?
欢迎任何建议。