<div dir="ltr"><div><div>@<span style="font-family:arial,sans-serif;font-size:13.333333015441895px;font-weight:bold;white-space:nowrap">Mauro Sznelwar</span></div></div><div>Qual sistema operacional você esta usando?</div>
<div>Parece que o erro tem haver de estar faltando alguma coisa, o compilador de c++?</div><div>Eu uso o ubunto aqui, e ja veio junto o compilador, o compilador está instalado ae certinho?</div><div>Na verdade eu não entendo muito bem de rcpp, estou apenas testando, mas talvez seja algo nesse sentido o erro ae. Aqui funciona normal o codigo.</div>
<div><br></div><div><br></div><div>E o vetor.erase(n) não funcionou :(</div><div><br></div><div>Quando eu tentei assim, deu uma msg de erro:<br></div><div><br></div><div>library(Rcpp)<br></div><div>vetor<-sample(100)<br>
</div><div><br></div><div>> cppFunction("</div><div>+     NumericVector insertionsortRC(NumericVector vetor) {</div><div>+         int n = vetor.size();</div><div>+         double aux;</div><div>+         int i;</div>
<div>+         if(n>1) {</div><div>+             vetor.erase(n);</div><div>+             insertionsortRC(vetor);</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>+         return vetor;</div><div>+         }</div>
<div>+     ")</div><div>> insertionsortRC(vetor)</div><div>*** Error in `/usr/lib/R/bin/exec/R': malloc(): memory corruption: 0x098db548 ***</div><div><br></div><div>Ai eu pensei se tinha algo haver com o indice, ai tentei com n-1, assim no vetor.erase(n-1)</div>
<div><br></div><div><div>> vetor</div><div>  [1]  33  31  86  25  70  40  88  81  13  85  87  39  60  64  10  82  89  14  66  36  15  96  26</div><div> [24]   4  54  29  83  55  68  91   6 100  51   7  53  99  65  23  94  57  90  32  47  16  50  28</div>
<div> [47]   3  98  11  18  76  63  77  74  49   8  97  12  27  35  79  80  20  67  93   5  56   9  37</div><div> [70]  24  92  69  38  44  17  46  43  34  19   2  95  72   1  61  41  62  22  42  21  84  48  78</div><div>
 [93]  73  30  59  58  52  75  71  45</div><div><br></div><div>> insertionsortRC(vetor)</div><div> [1] 3.607393e-313  3.300000e+01  3.100000e+01  8.600000e+01  2.500000e+01  7.000000e+01</div><div> [7]  4.000000e+01  8.800000e+01  8.100000e+01  1.300000e+01  8.500000e+01  8.700000e+01</div>
<div>[13]  3.900000e+01  6.000000e+01  6.400000e+01  1.000000e+01  8.200000e+01  8.900000e+01</div><div>[19]  1.400000e+01  6.600000e+01  3.600000e+01  1.500000e+01  9.600000e+01  2.600000e+01</div><div>[25]  4.000000e+00  5.400000e+01  2.900000e+01  8.300000e+01  5.500000e+01  6.800000e+01</div>
<div>[31]  9.100000e+01  6.000000e+00  1.000000e+02  5.100000e+01  7.000000e+00  5.300000e+01</div><div>[37]  9.900000e+01  6.500000e+01  2.300000e+01  9.400000e+01  5.700000e+01  9.000000e+01</div><div>[43]  3.200000e+01  4.700000e+01  1.600000e+01  5.000000e+01  2.800000e+01  3.000000e+00</div>
<div>[49]  9.800000e+01  1.100000e+01  1.800000e+01  7.600000e+01  6.300000e+01  7.700000e+01</div><div>[55]  7.400000e+01  4.900000e+01  8.000000e+00  9.700000e+01  1.200000e+01  2.700000e+01</div><div>[61]  3.500000e+01  7.900000e+01  8.000000e+01  2.000000e+01  6.700000e+01  9.300000e+01</div>
<div>[67]  5.000000e+00  5.600000e+01  9.000000e+00  3.700000e+01  2.400000e+01  9.200000e+01</div><div>[73]  6.900000e+01  3.800000e+01  4.400000e+01  1.700000e+01  4.600000e+01  4.300000e+01</div><div>[79]  3.400000e+01  1.900000e+01  2.000000e+00  9.500000e+01  7.200000e+01  1.000000e+00</div>
<div>[85]  6.100000e+01  4.100000e+01  6.200000e+01  2.200000e+01  4.200000e+01  2.100000e+01</div><div>[91]  8.400000e+01  4.800000e+01  7.800000e+01  7.300000e+01  3.000000e+01  5.900000e+01</div><div>[97]  5.800000e+01  5.200000e+01  7.500000e+01</div>
<div>> </div></div><div><br></div><div>Ai não funcionou. Mandando o vetor e o n junto, tudo funcionava, então acho que estou realizando alguma operação errada na chamada recursiva ali.</div><div><br></div><div>Olhando a descrição do comando aqui:</div>
<div><a href="http://www.cplusplus.com/reference/vector/vector/erase/">http://www.cplusplus.com/reference/vector/vector/erase/</a><br></div><div><br></div><div>Ele diz que apaga da memoria o valor, então imagino que talvez esteja dando problema na volta da recursão. Acho que não é tão simples usar Rcpp quanto imaginava.</div>
<div>Quando no primeiro caso la ele diz "memory corruption: 0x098db548", esse é o endereço de memoria que eu usei errado não é?</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br>
<br><div class="gmail_quote">Em 19 de outubro de 2013 01:35, Benilton Carvalho <span dir="ltr"><<a href="mailto:beniltoncarvalho@gmail.com" target="_blank">beniltoncarvalho@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr">vetor.erase(n)? </p>
<div class="gmail_quote"><div><div class="h5">On Oct 17, 2013 4:39 PM, "Augusto Ribas" <<a href="mailto:ribas.aca@gmail.com" target="_blank">ribas.aca@gmail.com</a>> wrote:<br type="attribution"></div></div>
<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 pessoal.<div><br></div><div>Eu estou com uma dificuldade em como fazer uma chamada recursiva usando o Rcpp.</div><div><br></div><div>Por curiosidade, eu estava fazendo alguns códigos aqui usando o Rcpp, só por experiencia.</div>


<div>Ai eu estava implementando o código para o insertion sort  (<a href="http://pt.wikipedia.org/wiki/Insertion_sort" target="_blank">http://pt.wikipedia.org/wiki/Insertion_sort</a>)</div><div><br></div><div>Minha duvida é a seguinte:</div>


<div><br></div><div>#Suponha que eu tenho um vetor qualquer:</div><div><br></div><div><div>vetor<-sample(100)</div><div>vetor</div></div><div><br></div><div>#Iterativamente, eu fiz um código para usar com o Rcpp assim:</div>


<div><br></div><div><div>library(Rcpp)</div><div><br></div><div>cppFunction("</div><div>    NumericVector insertionsortC(NumericVector vetor) {</div><div>        int n = vetor.size();</div><div><br></div><div>        double aux;</div>


<div>        int i , j;</div><div><br></div><div>        for(i=1;i<n;i++) {</div><div>            aux=vetor[i];</div><div>            j=i-1;</div><div>            while(j>=0 && 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>")</div></div><div><br></div><div><br>


</div><div>#Funcionou beleza. Ai eu fui tentar repetir a tentativa, recursivamente</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><div><br></div><div>#E assim funcionou blz, mas eu tive que começar a mandar o argumento n, </div><div>#que é o tamanho do vetor</div>


<div><br></div><div>#o que eu queria é fazer algo aqui, na chamada recursiva</div><div><br></div><div>#insertionsortRC(vetor,n-1);<br></div><div><br></div><div>#sei la, se eu conseguir tirar o ultimo elemento, eu posso suprimir esse n-1</div>


<div>#Eu não entendo de Rcpp e C++ muito bem.</div><div>#Mas tem uma forma simples de mudar o tamanho do vetor, ou arrancar o ultimo elemento dele</div><div>#algo tipo vetor.pop()</div><div><br></div><div>#pra fazer a chamada ficar tipo</div>


<div>#vetor.pop();<br></div><div>#insertionsortRC(vetor);<br></div><div>#que ai no inicio da chamada eu uso o int n = vetor.size(); igual ao formato iterativo.<br></div><div>#Bem, espero não estar sendo muito confuso na pergunta e que a função funcione.</div>


<div>#Mas imagino que deve ser super simples isso.</div><div><br></div><div>Agradeço a atenção desde ja :)</div><div><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></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.<br></blockquote></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>