[R-br] Problema no laço while e componentes de um vector

Michelle Bau Graczyk mbgraczyk em gmail.com
Quarta Abril 22 23:59:29 BRT 2015


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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20150422/47d52e51/attachment.html>


Mais detalhes sobre a lista de discussão R-br