[R-br] função, if dentro fo loop

Daniela Recchia daniela_recchia em yahoo.com.br
Quarta Novembro 19 11:28:59 BRST 2014


Acho que assim estaria menos errado, mas mesmo assim não funciona
graf <- function(n) {  u <- numeric(10*n)  sequ<-seq(10,10*n,10)  conv(sequ[10*n])  for (i in 1:n) {    u[i]<- conv(i)  }  return(u)} -- 
Daniela Rodrigues RecchiaM.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382Germany
“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
  

     Em Terça-feira, 18 de Novembro de 2014 21:10, Daniela Recchia <daniela_recchia em yahoo.com.br> escreveu:
   

 Muito obrigada Manoel!
Apesar se usar o R acabo não programando muita coisa sózinha, por isso quando tenho que fazer algo mesmo que simples as vezes me confundo. Por bug tinha entendido que eu deveria receber algum warning ou error do R, e como isso não ocorreu achei que estava tudo ok.
Muito obrigada e boa semana!
Abraços, -- 
Daniela Rodrigues RecchiaM.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382Germany
“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
  

     Em Terça-feira, 18 de Novembro de 2014 18:37, Manoel Galdino <mcz.fea em gmail.com> escreveu:
   

 Se a sua função não faz o que deveria fazer, bem, então acho que ela tem um bug! =)
Eu reescrevi sua função, eacho que agora funciona. Seu problema era de índice. Não existe índice 0 no R (diferentemente de C, por exemplo). Matriz, vetor etc. começa sempre em 1.
conv2 <- function(n, m=0.1, dp=sqrt(0.05)) {  u <- matrix(nrow=n+1,ncol=1)  f <- function(x) {pnorm(x,m,dp)}  p <- function(x) {f(x)}  I <-  function (x) {-p(x)*log2(p(x)) }  u[1,]<- I(0)  for (i in 2:n) {     f  <-  function(i) {pnorm(i*1/n,m,dp)}    p <-  function(i) {f(i)-f(i-1)}    u[i,]<- I(i)  }  y <-u[0:n,]  y}




2014-11-18 15:12 GMT-02:00 Daniela Recchia <daniela_recchia em yahoo.com.br>:

Olá Manoel,
obrigada pelo retorno. Não conhecia o GitHub obrigada pela indicação.
A princípio os valores de m e dp são fixos, não são importantes nesse exemplo, e não tenho nenhum Bug pra solucionar, a função funciona perfeitamente, com a única exceção de que o valor para i=0 não é calculado corretamente.
É isso mesmo que eu quero, ter os valores de f e p para então realizar a multiplicação que será retornada na matriz. Aqui um exemplo: (usei m=0.1; dp=sqrt(0.05))
> conv(10) [1] 0.437497149 0.437497149 0.399621300 0.323958199 0.224710500 0.129711990 [7] 0.061315128 0.023552114 0.007329468 0.001846871
Veja que o primeiro e o segundo valores sãi iguais (o que na verdade corresponde a i=1) e é isso que quero resolver.
Abraços,
Daniela -- 
Daniela Rodrigues RecchiaM.Sc. in Statistics

Tel. (Mobil): +49 01578 7588382Germany
“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
  

     Em Terça-feira, 18 de Novembro de 2014 18:01, Manoel Galdino <mcz.fea em gmail.com> escreveu:
   

 Seu código tá bem ruim de ler...Recomendo que você utilize o GitHub para postar seus códigos. Além disso, ajudaria se você dissesse o que pretende com a função. Do jeito que está é bem difícil ajudar.
Mas voltando a sua pergunta. Fiz algumas alterações no código (só reorganizei). Veja se está funcionando...


conv<- function(n) {                   u <- matrix(nrow=n+1,ncol=1)                        for (i in 0:n) {                                 if (i==0) {                                      f <- function(i) {pnorm(i,m,dp)}                                      p<- function(i) {f(i)}                                } else  {                                      f  <-  function(i) {pnorm(i*1/n,m,dp)}                                      p <-  function(i) {f(i)-f(i-1)}
                               }                     I <-  function (i) {-p(i)*log2(p(i))}                     u[i,]<- I(i)}                   y <-u[0:n,]                   y }

Use o browser pra você debugar seu código. No livro do Hadley tem mais explicações sobre como debugar um código.
abçsM
ps.: Onde que os argumentos 'm' e 'dp' entram na função? Eles são valores globais? Não é a prática mais recomendada...ps.2: a cada iteração do loop, as funções f e p são subscritas, de forma que ao final você terá uma f e uma p, dada por i igual a n. É isso mesmo que você quer?
On Tue, Nov 18, 2014 at 2:00 PM, Daniela Recchia <daniela_recchia em yahoo.com.br> wrote:

Boa tarde pessoal,
tenho certeza que meu problema é bem simples mas não estou conseguindo visualizar a solução, criei a função:
conv<- function(n){u<-matrix(nrow=n+1,ncol=1)                   for (i in 0:n) {                      if(i==0) f<-function(i) {pnorm(i,m,dp)}                     else     f<- function(i) {pnorm(i*1/n,m,dp)}                     if(i==0) p<- function(i) {f(i)}                     else     p<- function(i) {f(i)-f(i-1)}                     I<- function (i) {-p(i)*log2(p(i))}                     u[i,]<- I(i)}                   y<-u[0:n,]; y}
Mas para o caso onde i==0 não está sendo feito corretamente, e preciso idendificar se não tenho problemas na condição f(i)-f(i-1), o que ele retorna no lugar do i=0 é o valor do i=1.
Alguém saberia me dar uma dica?
Abraços,
Daniela -- 
Daniela Rodrigues Recchia

“The standard of success in life is absolutely the amount of joy you feel”
Esther & Jerry Hick
 
_______________________________________________
R-br mailing list
R-br em 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/


    



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


    
_______________________________________________
R-br mailing list
R-br em 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.

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


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