<p dir="ltr">É uma linha de comando que terei prazer em dizer quando estiver num post "próprio", no sentido de não invadir um outro assunto. ;-)</p>
<div class="gmail_quote">On Mar 14, 2013 9:16 PM, <<a href="mailto:andrebvs@bol.com.br">andrebvs@bol.com.br</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<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 < <a href="mailto:jackebcampos@hotmail.com" target="_blank">jackebcampos@hotmail.com</a> ></strong> escreveu:</div>
<div></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> </div>
> From: <a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a><br>> Date: Thu, 14 Mar 2013 15:21:12 -0300<br>> To: <a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a><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>> <<a href="mailto:jackebcampos@hotmail.com" target="_blank">jackebcampos@hotmail.com</a>> 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: <a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a><br>> >> Date: Thu, 14 Mar 2013 13:56:40 -0300<br>
> ><br>> >> To: <a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a><br>> >> Subject: Re: [R-br] "Ordenação Mergesort"<br>> >><br>> >>
; 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>> >> <<a href="mailto:jackebcampos@hotmail.com" target="_blank">jackebcampos@hotmail.com</a>> 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: <a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a><br>> >> >> Date: Thu, 14 Mar 2013 13:12:49 -0300<br>
>
>> >> To: <a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a><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>> >> >> <<a href="mailto:jackebcampos@hotmail.com" target="_blank">jackebcampos@hotmail.com</a>> 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: <a href="mailto:eliaskrainski@yahoo.com.br" target="_blank">eliaskrainski@yahoo.com.br</a><br>
> >> >> >> To: <a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a><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>
> >> >
;> >> R-br mailing list<br>> >> >> >> <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> >> >> >> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> >> >> >> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>> >> >> >> código mínimo reproduzível.<br>
> >> >> ><br>> >> >> > _______________________________________________<br>> >> >> > R-br mailing list<br>> >> >> > <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
> >> >> > <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>> >> >> > Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>
> >> >> > código<br>> >> >> > mínimo reproduzível.<br>> >> >> _______________________________________________<br>> >> >> R-br mai
ling list<br>> >> >> <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> >> >> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> >> >> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>> >> >> código mínimo reproduzível.<br>> >> ><br>
> >> > _______________________________________________<br>> >> > R-br mailing list<br>> >> > <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> >> > <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> >> > Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>> >> > código<br>> >> > mínimo reproduzível.<br>
> >> _______________________________________________<br>> >> R-br mailing list<br>> >> <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> >> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> >>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça<br>> >> código mínimo reproduzível.<br>> ><br>> > _______________________________________________<br>
> > R-br mailing list<br>> > <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> > <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> > Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código<br>> > mínimo reproduzível.<br>> _______________________________________________<br>
> R-br mailing list<br>> <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</div>
</div>
</div>
<div> </div>
<br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div>