<div dir="ltr">Nossa, muito obrigado, funcionou perfeitamente. Estava ficando frustado sem saber o que fazer :)<div>Eu fiz essa função primeiro em C, e estava apanhando para transcrever em R, faltou uma atribuição ali.</div>
<div><br></div><div>Por isso a bagunça nos "<-" e "=".</div><div><br></div><div>Agora preciso entender melhor o que está acontecendo.</div><div><br></div><div>Mas novamente muito obrigado pela ajuda :)</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">Em 29 de outubro de 2013 14:44, Manoel Galdino <span dir="ltr"><<a href="mailto:mcz.fea@gmail.com" target="_blank">mcz.fea@gmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Eu não entendi muito bem. Ajudaria se você comentasse seu código, desse nomes mais significativos (ao invés de "aux", que tal "valor_a_ser_inserido"?) e usasse uma sintaxe consistente (ora você usa "=" para atribuição, ora "<-", mas tente isso:</div>


<div><br></div><div><div style="font-family:arial,sans-serif;font-size:13px">insertionsortR<-function(vetor,n) {</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">


    if(n>1) {</div><div style="font-family:arial,sans-serif;font-size:13px">        vetor <- insertionsortR(vetor,n-1) ## mudei o código aqui nessa linha</div><div class="im"><div style="font-family:arial,sans-serif;font-size:13px">


        aux=vetor[n]</div><div style="font-family:arial,sans-serif;font-size:13px">        i=n</div><div style="font-family:arial,sans-serif;font-size:13px">        while(vetor[i-1]> aux && i > 1) {</div><div style="font-family:arial,sans-serif;font-size:13px">


            vetor[i]<-vetor[i-1]</div><div style="font-family:arial,sans-serif;font-size:13px">            i<- i-1</div><div style="font-family:arial,sans-serif;font-size:13px">            }</div><div style="font-family:arial,sans-serif;font-size:13px">


        vetor[i]<-aux</div><div style="font-family:arial,sans-serif;font-size:13px">        }</div><div style="font-family:arial,sans-serif;font-size:13px">    </div><div style="font-family:arial,sans-serif;font-size:13px">


    return(vetor)</div><div style="font-family:arial,sans-serif;font-size:13px">    }</div></div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/29 Augusto Ribas <span dir="ltr"><<a href="mailto:ribas.aca@gmail.com" target="_blank">ribas.aca@gmail.com</a>></span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr">Ola pessoa, eu estava tentando implementar o algorítimo insertion sort no R de forma recursiva, mas não estou conseguindo e também não consigo identificar onde estou errado.<div>


<br></div><div>#Veja so. Eu tenho um vetor qualquer:</div>
<div><br></div><div><div>vetor<-sample(100)</div><div>vetor</div><div><br></div><div>#Iterativamente ele funciona beleza, eu fiz assim:</div><div><br></div><div><div>insertionsort<-function(vetor){</div><div>    n<-length(vetor)</div>



<div><br></div><div>    for(i in 2:n) {</div><div>        aux=vetor[i]</div><div>        j=i-1</div><div>        while(j>=1 && vetor[j]>aux) {</div><div>            vetor[j+1]<-vetor[j]</div><div>            j=j-1</div>



<div>            }</div><div>        vetor[j+1]=aux</div><div>        }</div><div>    return(vetor)</div><div>    }</div><div><br></div><div>insertionsort(vetor)</div></div><div><br></div><div>#Mas quando tento usar recursão, não consigo fazer funcionar, ele não organiza</div>



<div><br></div><div><div>insertionsortR<-function(vetor,n) {</div><div><br></div><div>    if(n>1) {</div><div>        insertionsortR(vetor,n-1)</div><div>        aux=vetor[n]</div><div>        i=n</div><div>        while(vetor[i-1]>aux && i>1) {</div>



<div>            vetor[i]<-vetor[i-1]</div><div>            i<-i-1</div><div>            }</div><div>        vetor[i]<-aux</div><div>        }</div><div>    </div><div>    return(vetor)</div><div>    }</div><div>



<br></div><div><br></div><div>insertionsortR(vetor,length(vetor))</div></div><div><br></div><div>#Usando o rcpp ele funcionou dessa forma aqui:</div><div><br></div><div><div>cppFunction("</div><div>    NumericVector insertionsortRC(NumericVector vetor, int n) {</div>



<div><br></div><div>        double aux;</div><div>        int i;</div><div><br></div><div>        if(n>1) {</div><div>            insertionsortRC(vetor,n-1);</div><div>            aux=vetor[n-1];</div><div>            i=n-1;</div>



<div>            while(vetor[i-1]>aux && i>=0 ) {</div><div>                vetor[i]=vetor[i-1];</div><div>                i--;</div><div>                }</div><div>            vetor[i]=aux;</div><div>            }</div>



<div><br></div><div>        return vetor;</div><div>        }</div><div>    ")</div><div><br></div><div>insertionsortRC(vetor,length(vetor))</div></div><div><br></div><div>Alguém sabe dizer onde estou errado la no insertionsort no R. Eu imagino se estou imaginado errado o funcionamento dos vetores no R, se ele ta refazendo um novo vetor a cada chamada e no final nada da certo do jeito que estou fazendo.</div>



<div><br></div><div>Recursão funciona beleza no R, por exemplo usando fatorial:</div><div><br></div><div><div>fatorial<-function(n) {</div><div>    if(n==1) {</div><div>        return(1)</div><div>        } else {</div>



<div>            return(n*fatorial(n-1))</div><div>            }</div><div>    }</div><div><br></div><div>fatorial(5)</div></div><div><br></div><div>Mas no caso do vetor, não entendi o funcionamento ali dos vetores, se alguém puder dar uma luz :)</div>


<span><font color="#888888">
<div><br></div>-- <br><div dir="ltr"><div>Grato<br>Augusto C. A. Ribas</div>
<div> </div>
<div>Site Pessoal: <a href="http://recologia.com.br/" target="_blank">http://recologia.com.br/</a><a href="http://augustoribas.heliohost.org" target="_blank"></a></div><div>Github: <a href="https://github.com/Squiercg" target="_blank">https://github.com/Squiercg</a></div>




<div>Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br></div></div>
</font></span></div></div>
<br></div></div>_______________________________________________<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.<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote>
</div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br>

Manoel Galdino<br><a href="https://sites.google.com/site/galdinomcz/" target="_blank">https://sites.google.com/site/galdinomcz/</a><br>
</font></span></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><br><br clear="all"><div><br></div>-- <br>
<div dir="ltr"><div>Grato<br>Augusto C. A. Ribas</div>
<div> </div>
<div>Site Pessoal: <a href="http://recologia.com.br/" target="_blank">http://recologia.com.br/</a><a href="http://augustoribas.heliohost.org" target="_blank"></a></div><div>Github: <a href="https://github.com/Squiercg" target="_blank">https://github.com/Squiercg</a></div>

<div>Lattes: <a href="http://lattes.cnpq.br/7355685961127056" target="_blank">http://lattes.cnpq.br/7355685961127056</a><br></div></div>
</div>