Boa noite,
estou com um código que necessita o uso de um for dentro de um while. Entretanto, o uso do for aumentou o tempo de execução.
Gostaria de saber se alguém tem alguma sugestão para contornar este problema???? Acredito que a questão seja organizacional, portanto, não estou enviando um CMR mas caso seja necessário será encaminhado!!!!!!!
dif <- 1
tol <- 1e-05
i <- 0
neff <- c(2)
while(dif > tol){
i <- i + 1
LHS <- rBind( cBind(XpX, XpZ), cBind(ZpX, (ZpZ + Ginv)) )
invLHS <- solve(LHS)
est <- solve(LHS,RHS)
b <- est[1:ncol(X.f),]
u <- est[(ncol(X.f) + 1):nrow(est),]
sig2E <- (ypy - t(b)%*%Xpy - t(u)%*%Zpy)/(N - rankX)
sig2U <- numeric(0)
for(j in 1:length(neff)){
sig2U <- c(sig2U, ( t(est[z[j]:lz[j],])%*%est[z[j]:lz[j],] + sig2E*sum(diag( invLHS[z[j]:lz[j], z[j]:lz[j]] )) )/neff[j])
}
sig2U <- do.call(rBind,lapply(sig2U,as.matrix))
rel <- as.numeric(sig2E)/sig2U
if(!is.null(var)){
lamb <- rel
ratio <- rep(lamb,neff)
newvar <- rBind(sig2U,sig2E)
cds <- sig2U/sum(newvar)
dif <- as.numeric(max(abs(newvar - ovar)))
}
if(is.null(var)){
lamb <- rel
ratio <- rep(lamb,neff)
newvar <- rBind(sig2U,sig2E)
cds <- sig2U/sum(newvar)
dif <- as.numeric(max(abs(cds - ocds)))
}
ovar <- newvar
ocds <- cds
oratio <- ratio
olamb <- lamb
Ginv <- Diagonal(sum(neff),oratio)
}
Desde já agradeço por qualquer colaboração.
Atenciosamente,
Tiago.
#################################################################
Tiago de Souza Marçal - Graduando em Agronomia pelo CCA-UFES
Bolsista de Iniciação Científica da área de Genética e Melhoramento de Plantas
#################################################################