Nossa, muito obrigado, funcionou perfeitamente. Estava ficando frustado sem saber o que fazer :) Eu fiz essa função primeiro em C, e estava apanhando para transcrever em R, faltou uma atribuição ali.
Por isso a bagunça nos "<-" e "=". Agora preciso entender melhor o que está acontecendo. Mas novamente muito obrigado pela ajuda :) Em 29 de outubro de 2013 14:44, Manoel Galdino <[email protected]> escreveu: > 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 <[email protected]> > >> 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 >> >> Site Pessoal: http://recologia.com.br/<http://augustoribas.heliohost.org> >> Github: https://github.com/Squiercg >> Lattes: http://lattes.cnpq.br/7355685961127056 >> >> _______________________________________________ >> 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. >> > > > > -- > Manoel Galdino > https://sites.google.com/site/galdinomcz/ > > _______________________________________________ > 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. > -- 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
_______________________________________________ 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.
