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

Manoel Galdino mcz.fea em gmail.com
Terça Novembro 18 15:48:32 BRST 2014


Mais uma correção e simplificando:

conv3 <- function(n, m=0.1, dp=sqrt(0.05)) {
  u <- numeric(n+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+1)) {
    f  <-  function(i) {pnorm(i*1/n,m,dp)}
    p <-  function(i) {f(i)-f(i-1)}
    u[i]<- I(i)
  }
 return(u)
}

2014-11-18 15:44 GMT-02:00 Manoel Galdino <mcz.fea em gmail.com>:

> Não há de que.
>
> Ah, corrige só uma linha do código que ainda está errado (embora não afete
> o resultado, aparentemente). No final, troca por:
> y <- u[1:n,]
>
> 2014-11-18 15:41 GMT-02:00 Daniela Recchia <daniela_recchia em yahoo.com.br>:
>
> 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 Recchia
>> M.Sc. in Statistics
>>
>> Tel. (Mobil): +49 01578 7588382
>> Germany
>>
>> “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 Recchia
>> M.Sc. in Statistics
>>
>> Tel. (Mobil): +49 01578 7588382
>> Germany
>>
>> “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
>> <http://adv-r.had.co.nz/Exceptions-Debugging.html> tem mais explicações
>> sobre como debugar um código.
>>
>> abçs
>> M
>>
>> 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/
>>
>>
>>
>
>
> --
> Manoel Galdino
> https://sites.google.com/site/galdinomcz/
>



-- 
Manoel Galdino
https://sites.google.com/site/galdinomcz/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20141118/e968fce5/attachment.html>


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