[R-br] Comando for em cadeia

Rodrigo Coster rcoster em gmail.com
Segunda Setembro 17 10:57:38 BRT 2012


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


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