Eu não entendi muito bem. Ajudaria se você comentasse seu código, desse nomes mais significativos (ao invés de "aux", que tal "valor_a_ser_inserido"?) e usasse uma sintaxe consistente (ora você usa "=" para atribuição, ora "<-", mas tente isso:

insertionsortR<-function(vetor,n) {

    if(n>1) {
        vetor <- insertionsortR(vetor,n-1) ## mudei o código aqui nessa linha
        aux=vetor[n]
        i=n
        while(vetor[i-1]> aux && i > 1) {
            vetor[i]<-vetor[i-1]
            i<- i-1
            }
        vetor[i]<-aux
        }
    
    return(vetor)
    }



2013/10/29 Augusto Ribas <ribas.aca@gmail.com>
Ola pessoa, eu estava tentando implementar o algorítimo insertion sort no R de forma recursiva, mas não estou conseguindo e também não consigo identificar onde estou errado.

#Veja so. Eu tenho um vetor qualquer:

vetor<-sample(100)
vetor

#Iterativamente ele funciona beleza, eu fiz assim:

insertionsort<-function(vetor){
    n<-length(vetor)

    for(i in 2:n) {
        aux=vetor[i]
        j=i-1
        while(j>=1 && vetor[j]>aux) {
            vetor[j+1]<-vetor[j]
            j=j-1
            }
        vetor[j+1]=aux
        }
    return(vetor)
    }

insertionsort(vetor)

#Mas quando tento usar recursão, não consigo fazer funcionar, ele não organiza

insertionsortR<-function(vetor,n) {

    if(n>1) {
        insertionsortR(vetor,n-1)
        aux=vetor[n]
        i=n
        while(vetor[i-1]>aux && i>1) {
            vetor[i]<-vetor[i-1]
            i<-i-1
            }
        vetor[i]<-aux
        }
    
    return(vetor)
    }


insertionsortR(vetor,length(vetor))

#Usando o rcpp ele funcionou dessa forma aqui:

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;
        }
    ")

insertionsortRC(vetor,length(vetor))

Alguém sabe dizer onde estou errado la no insertionsort no R. Eu imagino se estou imaginado errado o funcionamento dos vetores no R, se ele ta refazendo um novo vetor a cada chamada e no final nada da certo do jeito que estou fazendo.

Recursão funciona beleza no R, por exemplo usando fatorial:

fatorial<-function(n) {
    if(n==1) {
        return(1)
        } else {
            return(n*fatorial(n-1))
            }
    }

fatorial(5)

Mas no caso do vetor, não entendi o funcionamento ali dos vetores, se alguém puder dar uma luz :)

--
Grato
Augusto C. A. Ribas
 

_______________________________________________
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.



--
Manoel Galdino
https://sites.google.com/site/galdinomcz/