[R-br] Duvida rcpp, como remover um elemento de um vetor no código C++

Mauro Sznelwar sznelwar em uol.com.br
Domingo Outubro 20 21:44:24 BRST 2013


Windows XP
  @Mauro Sznelwar
  Qual sistema operacional você esta usando?
  Parece que o erro tem haver de estar faltando alguma coisa, o compilador de c++?
  Eu uso o ubunto aqui, e ja veio junto o compilador, o compilador está instalado ae certinho?
  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.




  E o vetor.erase(n) não funcionou :(


  Quando eu tentei assim, deu uma msg de erro:



  library(Rcpp)

  vetor<-sample(100)



  > cppFunction("
  +     NumericVector insertionsortRC(NumericVector vetor) {
  +         int n = vetor.size();
  +         double aux;
  +         int i;
  +         if(n>1) {
  +             vetor.erase(n);
  +             insertionsortRC(vetor);
  +             aux=vetor[n-1];
  +             i=n-1;
  +             while(vetor[i-1]>aux && i>=0 ) {
  +                 vetor[i]=vetor[i-1];
  +                 i--;
  +                 }
  +             vetor[i]=aux;
  +             }
  +         return vetor;
  +         }
  +     ")
  > insertionsortRC(vetor)
  *** Error in `/usr/lib/R/bin/exec/R': malloc(): memory corruption: 0x098db548 ***


  Ai eu pensei se tinha algo haver com o indice, ai tentei com n-1, assim no vetor.erase(n-1)


  > vetor
    [1]  33  31  86  25  70  40  88  81  13  85  87  39  60  64  10  82  89  14  66  36  15  96  26
   [24]   4  54  29  83  55  68  91   6 100  51   7  53  99  65  23  94  57  90  32  47  16  50  28
   [47]   3  98  11  18  76  63  77  74  49   8  97  12  27  35  79  80  20  67  93   5  56   9  37
   [70]  24  92  69  38  44  17  46  43  34  19   2  95  72   1  61  41  62  22  42  21  84  48  78
   [93]  73  30  59  58  52  75  71  45


  > insertionsortRC(vetor)
   [1] 3.607393e-313  3.300000e+01  3.100000e+01  8.600000e+01  2.500000e+01  7.000000e+01
   [7]  4.000000e+01  8.800000e+01  8.100000e+01  1.300000e+01  8.500000e+01  8.700000e+01
  [13]  3.900000e+01  6.000000e+01  6.400000e+01  1.000000e+01  8.200000e+01  8.900000e+01
  [19]  1.400000e+01  6.600000e+01  3.600000e+01  1.500000e+01  9.600000e+01  2.600000e+01
  [25]  4.000000e+00  5.400000e+01  2.900000e+01  8.300000e+01  5.500000e+01  6.800000e+01
  [31]  9.100000e+01  6.000000e+00  1.000000e+02  5.100000e+01  7.000000e+00  5.300000e+01
  [37]  9.900000e+01  6.500000e+01  2.300000e+01  9.400000e+01  5.700000e+01  9.000000e+01
  [43]  3.200000e+01  4.700000e+01  1.600000e+01  5.000000e+01  2.800000e+01  3.000000e+00
  [49]  9.800000e+01  1.100000e+01  1.800000e+01  7.600000e+01  6.300000e+01  7.700000e+01
  [55]  7.400000e+01  4.900000e+01  8.000000e+00  9.700000e+01  1.200000e+01  2.700000e+01
  [61]  3.500000e+01  7.900000e+01  8.000000e+01  2.000000e+01  6.700000e+01  9.300000e+01
  [67]  5.000000e+00  5.600000e+01  9.000000e+00  3.700000e+01  2.400000e+01  9.200000e+01
  [73]  6.900000e+01  3.800000e+01  4.400000e+01  1.700000e+01  4.600000e+01  4.300000e+01
  [79]  3.400000e+01  1.900000e+01  2.000000e+00  9.500000e+01  7.200000e+01  1.000000e+00
  [85]  6.100000e+01  4.100000e+01  6.200000e+01  2.200000e+01  4.200000e+01  2.100000e+01
  [91]  8.400000e+01  4.800000e+01  7.800000e+01  7.300000e+01  3.000000e+01  5.900000e+01
  [97]  5.800000e+01  5.200000e+01  7.500000e+01
  > 


  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.


  Olhando a descrição do comando aqui:
  http://www.cplusplus.com/reference/vector/vector/erase/



  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.
  Quando no primeiro caso la ele diz "memory corruption: 0x098db548", esse é o endereço de memoria que eu usei errado não é?








-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131020/157b1dac/attachment.html>


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