
Pelo que eu entendi do teu código, aninhando 3 for () tu consegue o que tu quer: n <- 4 dv <- 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@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@gmail.com To: r-br@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@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@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@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@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.