[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