R:lm和nls中的循环效率

时间:2017-06-19 15:49:02

标签: r

我正在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循环更有效。是否有更好的替代方案需要花费一小部分时间进行大量迭代?

欢迎任何建议。

0 个答案:

没有答案