
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@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@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@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@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/