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

Mauro Sznelwar sznelwar em uol.com.br
Sábado Outubro 19 00:14:40 BRT 2013


Como eu faço para rodar este código? Veja a mensagem que recebi:

Error in sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput,  : 
  Error 1 occurred building shared library.

WARNING: The tools required to build C++ code for R were not found.

Please download and install the appropriate version of Rtools:

http://cran.r-project.org/bin/windows/Rtools/

  Ola pessoal.


  Eu estou com uma dificuldade em como fazer uma chamada recursiva usando o Rcpp.


  Por curiosidade, eu estava fazendo alguns códigos aqui usando o Rcpp, só por experiencia.
  Ai eu estava implementando o código para o insertion sort  (http://pt.wikipedia.org/wiki/Insertion_sort)


  Minha duvida é a seguinte:


  #Suponha que eu tenho um vetor qualquer:


  vetor<-sample(100)
  vetor


  #Iterativamente, eu fiz um código para usar com o Rcpp assim:


  library(Rcpp)


  cppFunction("
      NumericVector insertionsortC(NumericVector vetor) {
          int n = vetor.size();


          double aux;
          int i , j;


          for(i=1;i<n;i++) {
              aux=vetor[i];
              j=i-1;
              while(j>=0 && vetor[j]>aux) {
                  vetor[j+1]=vetor[j];
                  j=j-1;
                  }
              vetor[j+1]=aux;
              }
          return vetor;
          }
  ")




  #Funcionou beleza. Ai eu fui tentar repetir a tentativa, recursivamente


  cppFunction("
      NumericVector insertionsortRC(NumericVector vetor, int n) {


          double aux;
          int i;


          if(n>1) {
              insertionsortRC(vetor,n-1);
              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;
          }
      ")


  #E assim funcionou blz, mas eu tive que começar a mandar o argumento n, 
  #que é o tamanho do vetor


  #o que eu queria é fazer algo aqui, na chamada recursiva


  #insertionsortRC(vetor,n-1);



  #sei la, se eu conseguir tirar o ultimo elemento, eu posso suprimir esse n-1
  #Eu não entendo de Rcpp e C++ muito bem.
  #Mas tem uma forma simples de mudar o tamanho do vetor, ou arrancar o ultimo elemento dele
  #algo tipo vetor.pop()


  #pra fazer a chamada ficar tipo
  #vetor.pop();

  #insertionsortRC(vetor);

  #que ai no inicio da chamada eu uso o int n = vetor.size(); igual ao formato iterativo.

  #Bem, espero não estar sendo muito confuso na pergunta e que a função funcione.
  #Mas imagino que deve ser super simples isso.


  Agradeço a atenção desde ja :)


  -- 

  Grato
  Augusto C. A. Ribas

  Site Pessoal: http://recologia.com.br/
  Github: https://github.com/Squiercg
  Lattes: http://lattes.cnpq.br/7355685961127056


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


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