Boa noite,

Estou com um problema que eu acho que deve ser super simples mas não estou conseguindo resolver:

> MatrizCorrelação<-array(c(1,0.9,0.7,0.9,1,0.3,0.7,0.3,1),dim=c(3,3))
> EigenMC<-eigen(MatrizCorrelação)
> EigenMC$values
[1]  2.296727793  0.710624647 -0.007352439
> NovaMatrizCorrelação<-MatrizCorrelação
> NovoEigenMC<-eigen(NovaMatrizCorrelação)
> int<-0
> while(NovoEigenMC$values<0){
+   int<-int + 1
+ NovoEigenMC.<-ifelse(NovoEigenMC$values<0, 0, NovoEigenMC$values)
+ NovaMatrizCorrelação<-NovoEigenMC$vectors %*% diag(NovoEigenMC.) %*% t(NovoEigenMC$vectors)
+ NovaMatrizCorrelação<- NovaMatrizCorrelação/sqrt(diag(NovaMatrizCorrelação) %*% t(diag(NovaMatrizCorrelação)))
+ eigen(NovaMatrizCorrelação)$values
+ int
+ }
Mensagens de aviso perdidas:
In while (NovoEigenMC$values < 0) { :
  a condição tem comprimento > 1 e somente o primeiro elemento será usado

Eu pensei em colocar um for e fazer desta forma:
MatrizCorrelação<-array(c(1,0.9,0.7,0.9,1,0.3,0.7,0.3,1),dim=c(3,3))
EigenMC<-eigen(MatrizCorrelação)
EigenMC$values


NovaMatrizCorrelação<-MatrizCorrelação
NovoEigenMC<-eigen(NovaMatrizCorrelação)
int<-0
for(i in 1:3){
  

  while(NovoEigenMC$values[i]<0){

  int<-int + 1

NovoEigenMC.<-ifelse(NovoEigenMC$values<0, 0, NovoEigenMC$values)

NovaMatrizCorrelação<-NovoEigenMC$vectors %*% diag(NovoEigenMC.) %*% t(NovoEigenMC$vectors)

NovaMatrizCorrelação<- NovaMatrizCorrelação/sqrt(diag(NovaMatrizCorrelação) %*% t(diag(NovaMatrizCorrelação)))

eigen(NovaMatrizCorrelação)$values
int
}
}

Mas por algum motivo o programa fica rodando rodando e rodando e nada.

Muito obrigada,

Michelle