[R-br] Comando for em cadeia

Guilherme Heiden guilhermeheiden em hotmail.com
Segunda Setembro 17 11:31:15 BRT 2012


Nossa cara, um milhão de obrigados. Não tens ideia do quão útil foi a tua ajuda. Acabei de perceber que na criação do meu dv eu estava pecando ao usar apenas o [i] e não o [i,j]. Espero em breve poder retribuir à comunidade. Grande abraço,
Guilherme Heiden

Date: Mon, 17 Sep 2012 11:26:58 -0300
From: rcoster em gmail.com
To: r-br em listas.c3sl.ufpr.br
Subject: Re: [R-br] Comando for em cadeia

É que o codigo que mandei simula uma multivar e nao usa a tua... e eu também tinha entendido errado teu problema, aqui vai um que faz o que tu pediu, baseado na tua multivar
n <- ncol(multivar)
dv <- matrix(0,n,n)for (i in 1:n) {  for (j in i:n) {   dv[i,j] <- dv[j,i] <- sum((multivar[,i]-multivar[,j])^2)^.5 }}

2012/9/17 Guilherme Heiden <guilhermeheiden em hotmail.com>





Eaí Rodrigo! Muito obrigado pela parte de aninhar o for(). Me é bastante útil. Se tu pudesse me ajudar em mais um detalhe seria de grande valia..
Eu estou trabalhando com a seguinte matriz:
     [,1] [,2] [,3] [,4] [,5][1,]   20    5   11    7   49[2,]   18    9   10    2   45
[3,]   11   35   30   15    7[4,]   10    3    7    4   26
Então, no material que eu estou seguindo o sujeito entrega uma matriz quadrada (5x5) com os seguintes valores como resultado:
     [,1]    [,2]   [,3]    [,4]    [,5][1,]   0.0  30.5  22.7  21.8  42.9
[2,]    -     0.0   8.8   21.3  67.4[3,]    -     -      0.0   12.7  59.7
[4,]    -     -      -      0.0   64.5[5,]    -     -      -       -      0.0

A função para tal resultado, por exemplo no caso do 30.5 seria: dv12=((5-20)^2+(9-18)^2+(35-11)^2+(3-10)^2)^(1/2)=30,5
E assim sucessivamente.

O comando que tu me fizesse não entrega tal matriz. Ele me entregou uma matriz 4x5, com os seguintes valores:
         [,1]     [,2]     [,3]     [,4][1,] 0.000000 1.403864 1.814820 2.088134
[2,] 1.403864 0.000000 2.599762 1.771693[3,] 1.814820 2.599762 0.000000 3.112440[4,] 2.088134 1.771693 3.112440 0.000000
Tu saberia/poderia me dizer porque? Ou me dizer pelo menos quais alterações precisam ser feitas no código que tu me mandasse para eu obter aqueles valores de distância e uma matriz 5x5? Desculpa se estou parecendo preguiçoso, mas realmente ainda não saquei tudo do R e não pude visualizar o erro, mas a tua ajuda já me deu outra visão. 

Grande abraço!Date: Mon, 17 Sep 2012 10:57:38 -0300
From: rcoster em gmail.com
To: r-br em listas.c3sl.ufpr.br

Subject: Re: [R-br] Comando for em cadeia

Pelo que eu entendi do teu código, aninhando 3 for () tu consegue o que tu quer:
n <- 4dv <- matrix(0,n,n)multivar <- matrix(rnorm(1000),ncol=4)
vector <- rep(0,4)
for (i in 1:n) {  for (j in i:n) {  for (k in 1:n) {   vector[k] <- (multivar[k,i]-multivar[k,j])^2  }  dv[i,j] <- dv[j,i] <- sqrt(sum(vector))

 }}
Da pra criar em variaveis separadas (dv11, dv12, dv13...) usando o assign(), mas acho que em matriz é mais util pra ti.



2012/9/17 Guilherme Heiden <guilhermeheiden em hotmail.com>





FH, eu recebi a tua resposta com os caracteres alterados, não consegui entender a tua resposta e ainda não conheço esse comando. Mas o resultado do cálculo é o seguinte:


     [,1]      [,2]      [,3]     [,4]      [,5][1,] dv11   dv12   dv13  dv14    dv15

[2,]   -      dv22   dv23   dv24    dv25[3,]   -        -       dv33   dv34   dv35

[4,]   -        -        -       dv44    dv45[5,]  -        -         -          -       dv55


     [,1]    [,2]   [,3]    [,4]    [,5]
[1,]   0.0  30.5  22.7  21.8  42.9[2,]    -     0.0   8.8   21.3  67.4

[3,]    -     -      0.0   12.7  59.7[4,]    -     -      -      0.0   64.5

[5,]    -     -      -       -      0.0


Mas por exemplo, dv12 é: dv12=((5-20)^2+(9-18)^2+(35-11)^2+(3-10)^2)^(1/2)=30,5

Esse comando todo é o primeiro passo para uma matriz euclidiana, em que estou tirando os valores das distâncias das variáveis entre elas. Estou começando a programar para o método do vizinho mais próximo ou encadeamento único. 


Desde já, muito obrigado!

att,Guilherme 


Date: Mon, 17 Sep 2012 10:07:26 -0300
From: fernandohtoledo em gmail.com
To: r-br em listas.c3sl.ufpr.br


Subject: Re: [R-br] Comando for em cadeia

Guilherme,
Nada te impede de aninhar laþos for(). O que vocÛ chama de dvv?
Qual o resultado numÚrico dessa sua implementaþÒo?


att,FH


2012/9/17 Guilherme Heiden <guilhermeheiden em hotmail.com>





Olß, eu talvez nÒo tenha sido claro no assunto do e-mail, mas na minha concepþÒo o problema Ú este: um comando for dentro de outro.
Eu estou trabalhando com a seguinte matriz:



á á á[,1] [,2] [,3] [,4] [,5][1,] á 20 á á5 á 11 á á7 á 49[2,] á 18 á á9 á 10 á á2 á 45[3,] á 11 á 35 á 30 á 15 á á7[4,] á 10 á á3 á á7 á á4 á 26



E a partir desta eu gostaria de gerar outra matriz com a seguinte configuraþÒo:
á á á[,1] á á á[,2] á á [,3] á á[,4] á á[,5][1,] dv11 á dv12 á dv13 ádv14 á ádv15


[2,] á - á á ádv22 á dv23 á dv24 á ádv25[3,] á - á á á á- á á á dv33 á dv34 á dv35[4,] á - á á á á- á á á á- á á á dv44 á ádv45[5,] á- á á á á- á á á á - á á á á - á á á dv55



Para achar os devidos valores, eu criei a seguinte funþÒo:read.csv2("C:/multivar.csv",header=T)


multivar<-read.csv2("C:/multivar.csv",header=T)


áattach(multivar)


á


##Criar DV11:


vetor1<-NULL


áfor(i in 1:4) { 


ávetor1[i]<-(multivar[i,1]-multivar[i,1])^2


á}


dv11<-(sum(vetor1)^0.5)


rm(vetor1)


á


##Criar DV12:


vetor1<-NULL


for(i in 1:4) { 


vetor1[i]<-(multivar[i,1]-multivar[i,2])^2


}


dv12<-(sum(vetor1)^0.5)


rm(vetor1)


E assim sucessivamente.á


Minha d·vida:á
Hß a possibilidade de criar um comando "for" para os valores de dv serem criados automaticamente, ao invÚs de gerar um de cada vez, manualmente?







 		 	   		   		 	   		  

_______________________________________________

R-br mailing list

R-br em listas.c3sl.ufpr.br

https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br

Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneþa c¾digo mÝnimo reproduzÝvel.



_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel. 		 	   		  

_______________________________________________

R-br mailing list

R-br em listas.c3sl.ufpr.br

https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br

Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.



_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel. 		 	   		  

_______________________________________________

R-br mailing list

R-br em listas.c3sl.ufpr.br

https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br

Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.



_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel. 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120917/1b86e789/attachment.html>


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