<div>Em que situações essa rotina é interessante?<br /><br /></div>
<div>Aproveitando o gancho, gostaria de saber como posso eliminar de uma matrix vetores repetidos, no exemplo abaixo, a linha1 e a linha5 são iguais, gostaria que houvesse uma outra matrix ou dataframe com apenas as linhas não repetidas.</div>
<div> </div>
<div>Seja a matrix 6x4:</div>
<div> </div>
<div>linha1 <- 1,2,4,5</div>
<div>linha2 <- 7,2,1,5</div>
<div>
<div>linha3 <- 9,3,1,5</div>
linha4 <- 6,2,1,5</div>
<div>
<div>linha5 <- 5,2,1,4</div>
linha6 <- 9,2,1,5</div>
<div> </div>
<div>desde já agradeço!<br /><br /></div>
<div><em>Att.</em><br /><em>André</em></div>
<div><br /><br /></div>
<hr style="border-top: 1px solid #ccc;" />
<div>Em 14/03/2013 19:39, <strong>Jackeline Bonetti Campos < jackebcampos@hotmail.com ></strong> escreveu:</div>
<div class="notviscode"><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></div>
<div dir="ltr">Consegui!
<div> </div>
<div>Vou postar o código para caso alguém precise.</div>
<div> </div>
<div>Segue abaixo:</div>
<div> </div>
<div>
<div>semisort=function(y,z) #Função que vai juntando dois vetores que estão ordenados</div>
<div>{</div>
<div>  resultado=NULL </div>
<div>  tam_y=length(y)</div>
<div>  tam_z=length(z)</div>
<div> </div>
<div>  i=1</div>
<div>  while(tam_y>0 && tam_z>0) # Enquanto tiver elemento nos dois subvetores</div>
<div>  {</div>
<div>        if(y[1]<=z[1])       # se o primeiro elemento do subvetor a esquerda for menor que o primeiro elemento do subvetor a direita.</div>
<div>        {</div>
<div>            resultado[i]=y[1] #o resultado vai ser o elemento do vetor.</div>
<div>            y=y[-1] # Tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado</div>
<div>            tam_y=tam_y-1</div>
<div>        }</div>
<div>        else</div>
<div>        {</div>
<div>          resultado[i]=z[1]      # Se o primeiro elemento do vetor z for menor que o de y.</div>
<div>          z=z[-1]</div>
<div>          tam_z=tam_z-1                 #tira o primeiro elemento do vetor, já que ele já foi adicionado ao resultado</div>
<div>        }</div>
<div>        i<-i+1</div>
<div>  }</div>
<div> </div>
<div>  if(tam_y==0)</div>
<div>  {</div>
<div>    resultado<-c(resultado,z)</div>
<div>  }else</div>
<div>  {</div>
<div>    resultado<-c(resultado,y)</div>
<div>  }</div>
<div> </div>
<div>    return(resultado) # Retorna o resultado ordenado</div>
<div>}</div>
<div> </div>
<div>mergesort=function(vet)  # Função que irá dividir o subvetor ao meio </div>
<div>{</div>
<div>  tam=length(vet)     #Se a entrada tiver mais de um elemento, o algoritmo irá "quebrar" a entrada ao "meio" para ordenar individualmente cada entrada e depois juntar as metades já ordenadas</div>
<div> </div>
<div>  cat("chamada: mergesort(",vet,")","\n")</div>
<div>  </div>
<div>  if(tam>1)</div>
<div>  {</div>
<div>    meio=(tam/2)   </div>
<div>    esq=vet[1:floor(meio)] </div>
<div>    dit=vet[floor(meio+1):tam]      </div>
<div>    esq=mergesort(esq)</div>
<div>    dit=mergesort(dit)</div>
<div>    vet_ord=semisort(esq,dit) </div>
<div>    return(vet_ord)</div>
<div>  }</div>
<div>  else   # Se a entrada for um unico elemento não existe ordenação. Se TAM<1. devolve o elemento.</div>
<div>  {</div>
<div>     return(vet)</div>
<div>  }</div>
<div>}</div>
<br />
<div>
<div id="SkyDrivePlaceholder"> </div>
> From: beniltoncarvalho@gmail.com<br />> Date: Thu, 14 Mar 2013 15:21:12 -0300<br />> To: r-br@listas.c3sl.ufpr.br<br />> Subject: Re: [R-br] "Ordenação Mergesort"<br />> <br />> vc precisa explicar como vc esta' executando a funcao... comigo ela<br />> funciona como deveria:<br />> <br />> x = rnorm(10)<br />> mergesort(x)<br />> <br />> <br />> Em 14 de março de 2013 15:10, Jackeline Bonetti Campos<br />> <jackebcampos@hotmail.com> escreveu:<br />> > Entendi.<br />> > Porém , quando eu executo a função mergesort diz "vec não encontrado".<br />> > Porque será?<br />> ><br />> > Att,<br />> > Jackeline.<br />> ><br />> >> From: beniltoncarvalho@gmail.com<br />> >> Date: Thu, 14 Mar 2013 13:56:40 -0300<br />> ><br />> >> To: r-br@listas.c3sl.ufpr.br<br />> >> Subject: Re: [R-br] "Ordenação Mergesort"<br />> >><br />> >&gt
 ; exato, eu uso o i+1 p nao ter q ficar redimensionando o vetor a todo<br />> >> momento...<br />> >><br />> >> Em 14 de março de 2013 13:50, Jackeline Bonetti Campos<br />> >> <jackebcampos@hotmail.com> escreveu:<br />> >> > Verdade..<br />> >> > Vou separar em duas funções e fazer as chamadas recursivas e ver se da<br />> >> > certo!<br />> >> > Ta muito parecido com o seu. A maior diferença é na resposta.<br />> >> > A sua você criou um vetor do tamanho do vetor original e a partir que<br />> >> > foram<br />> >> > surgindo os menores valores você adotou i=1+i.<br />> >> > Correto?<br />> >> ><br />> >> > Obrigada novamente!<br />> >> ><br />> >> ><br />> >> >> From: beniltoncarvalho@gmail.com<br />> >> >> Date: Thu, 14 Mar 2013 13:12:49 -0300<br />>
  >> >> To: r-br@listas.c3sl.ufpr.br<br />> >> ><br />> >> >> Subject: Re: [R-br] "Ordenação Mergesort"<br />> >> >><br />> >> >> Pela "cara" do codigo, tudo o que vc precisa e' separar o codigo em<br />> >> >> duas funcoes... veja no que eu te mandei, que o mergesort chama ele<br />> >> >> proprio... e a ultima coisa e' fazer a ordenacao.<br />> >> >><br />> >> >> Em 14 de março de 2013 12:37, Jackeline Bonetti Campos<br />> >> >> <jackebcampos@hotmail.com> escreveu:<br />> >> >> > Olá Elias.<br />> >> >> > É o merge sort.<br />> >> >> ><br />> >> >> > Benilton Carvalho,obrigada!<br />> >> >> > Vou olhar a sua implementação.<br />> >> >> > Não mandei o código inteiro. Somente a parte que está dando erro.<br />&g
 t; >> >> ><br />> >> >> > Segue abaixo o código todo:<br />> >> >> ><br />> >> >> > mergesort=function(x){ # Função que irá quebrar a entrada ao meio<br />> >> >> > cada<br />> >> >> > vez<br />> >> >> > que for acionada<br />> >> >> > semisort=function(y,z){ #Função que vai juntando ordenadamente as<br />> >> >> > partes da entrada<br />> >> >> > resultado=NULL<br />> >> >> > while(length(y)>0 & length(z)>0){ # Enquanto tiver elemento<br />> >> >> > nos dois subvetores<br />> >> >> > if(y[1]<=z[1]){ # se o primeiro elemento do subvetor<br />> >> >> > a esquerda for menor que o primeiro elemento do subvetor a direita<br />> >> >> > resultado=c(resultado,y[1])<br />> >> >> > y=
 y[-1] # Tira o primeiro elemento do vetor,<br />> >> >> > já que ele já foi adicionado ao resultado<br />> >> >> > }<br />> >> >> > else{<br />> >> >> > resultado=c(resultado,z[1])<br />> >> >> > z=z[-1]<br />> >> >> > }<br />> >> >> > }<br />> >> >> > if(length(y)>0){ # A partir do momento que acaba os<br />> >> >> > elementos em uma das metades, me resta "copiar" o que sobrou da outra<br />> >> >> > metade<br />> >> >> > resultado=c(resultado,y)<br />> >> >> > }<br />> >> >> > if(length(z)>0){<br />> >> >> > resultado=c(resultado,z)<br />> >> >> > }<br />> >> >> > return(resultado) # Retorna o resultado ordenado<br />> >> >> > }<br />> >> >> > tam
 anho=length(x) # Se a entrada tiver mais de um elemento, o<br />> >> >> > algoritmo irá "quebrar" a entrada ao "meio" para ordenar<br />> >> >> > individualmente<br />> >> >> > cada entrada e depois juntar as metades já ordenadas<br />> >> >> > if(tamanho>1){<br />> >> >> > meio= tamanho/2<br />> >> >> > esq=x[1:floor(meio)]<br />> >> >> > dit=x[floor(meio+1):tamanho]<br />> >> >> > esq=mergesort(esq)<br />> >> >> > dit=mergesort(dit)<br />> >> >> > if(esq[length(esq)]<=dit[1]){<br />> >> >> > return(c(esq,dit))<br />> >> >> > }<br />> >> >> > else{<br />> >> >> > semisort(esq,dit)<br />> >> >> > }<br />> >> >> > }<br />> >> >> > else{ # Se a entrada for um unico ele
 mento, a ordenação dela é<br />> >> >> > trivial<br />> >> >> > return(x)<br />> >> >> > }<br />> >> >> > }<br />> >> >> ><br />> >> >> > Att,<br />> >> >> > Jackeline.<br />> >> >> ><br />> >> >> ><br />> >> >> >> From: eliaskrainski@yahoo.com.br<br />> >> >> >> To: r-br@listas.c3sl.ufpr.br<br />> >> >> >> Date: Thu, 14 Mar 2013 16:27:03 +0100<br />> >> >> >> Subject: Re: [R-br] "Ordenação Mergesort"<br />> >> >> ><br />> >> >> >><br />> >> >> >> Curiosidade: Esse algoritmo e' o quick sort?<br />> >> >> >><br />> >> >> >><br />> >> >> >> _______________________________________________<br />> >> &gt
 ;> >> R-br mailing list<br />> >> >> >> R-br@listas.c3sl.ufpr.br<br />> >> >> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> >> >> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br />> >> >> >> código mínimo reproduzível.<br />> >> >> ><br />> >> >> > _______________________________________________<br />> >> >> > R-br mailing list<br />> >> >> > R-br@listas.c3sl.ufpr.br<br />> >> >> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> >> >> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br />> >> >> > código<br />> >> >> > mínimo reproduzível.<br />> >> >> _______________________________________________<br />> >> >> R-br mai
 ling list<br />> >> >> R-br@listas.c3sl.ufpr.br<br />> >> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> >> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br />> >> >> código mínimo reproduzível.<br />> >> ><br />> >> > _______________________________________________<br />> >> > R-br mailing list<br />> >> > R-br@listas.c3sl.ufpr.br<br />> >> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> >> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br />> >> > código<br />> >> > mínimo reproduzível.<br />> >> _______________________________________________<br />> >> R-br mailing list<br />> >> R-br@listas.c3sl.ufpr.br<br />> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> >> 
 Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça<br />> >> código mínimo reproduzível.<br />> ><br />> > _______________________________________________<br />> > R-br mailing list<br />> > R-br@listas.c3sl.ufpr.br<br />> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código<br />> > mínimo reproduzível.<br />> _______________________________________________<br />> R-br mailing list<br />> R-br@listas.c3sl.ufpr.br<br />> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br<br />> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.</div>
</div>
</div>
<div> </div>