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 é?
_______________________________________________
R-br mailing list
[email protected]
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
mínimo reproduzível.