
20 Out
2013
20 Out
'13
23:54
Pelo que eu entendo, o Rcpp compila o codigo que você escreve em c++ numa função, então tem que ter o compilador, no linux ele usa o gcc, agora no windows não sei, mas imagino que esteja faltando o compilador. De uma olhada nesse post: http://www.r-bloggers.com/installing-rcpp-on-windows-7-for-r-and-c-integration/ E em outro forum, fui informado que o problema é o meu codigo mesmo, imagino que so da para fazer o algoritimo mandando os dois argumentos, o vetor e o tamanho dele. http://stackoverflow.com/questions/19472211/how-to-remove-an-element-in-numericvector-for-a-recursion-using-r-and-rcpp Em 20 de outubro de 2013 20:44, Mauro Sznelwar <sznelwar@uol.com.br>escreveu: > ** > *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 > R-br@listas.c3sl.ufpr.br > 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. > -- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.com.br/ <http://augustoribas.heliohost.org> Github: https://github.com/Squiercg Lattes: http://lattes.cnpq.br/7355685961127056