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

Augusto Ribas ribas.aca em gmail.com
Quinta Outubro 17 16:39:27 BRT 2013


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/ <http://augustoribas.heliohost.org>
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/20131017/137a806f/attachment.html>


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