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
 
#################################################################