[R-br] Dúvida função no R
Fabio Mathias Corrêa
fabio.ufla em yahoo.com.br
Sábado Setembro 15 09:30:36 BRT 2012
Felipe
Da forma que o Eduardo fez a função está retornando valores entre 1 e 5. Não é isto o que vc quer?
O table(s) está mostrando a frequência com que os valores apareceram na simulação que ele fez.
Valeu!
Fábio Mathias Corrêa
Universidade Estadual de Santa Cruz
Departamento de Ciências Exatas e da Terra - DCET
Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
CEP 45662-900. Ilhéus-Bahia
Tel.: 73-3680-5076
________________________________
De: Felipe Buchbinder <felbuch em gmail.com>
Para: r-br em listas.c3sl.ufpr.br
Enviadas: Sexta-feira, 14 de Setembro de 2012 23:00
Assunto: Re: [R-br] Dúvida função no R
Eduardo e Fábio,
Muito obrigado pela ajuda. Se o problema não está no which, alguma idéia de onde ele possa estar?
A função resp já retorna resultados absurdos, então o problema tem que estar nela. Só não vejo onde....
2012/9/14 Eduardo Leoni <e.leoni em gmail.com>
E o problema não está no which...
>
>
>resp <- function() {
> k <- 5
> p.vec = NULL
> for(category in 1:k) # k = 5
> {
> p = runif(1)
> p.vec = c(p.vec,p)
> }
> ##Generates a random number
> seed<-runif(1,0.2,0.8)
> ##Selects an answer
> temp = which ( p.vec>seed )
> if( length (temp) > 0 ) { resp = max (temp) } else { resp = 1 }
> resp
>}
>s <- NULL
>for (i in 1:100) {
> s <- c(s, resp())
>}
>> table(s)
>>s
>> 1 2 3 4 5
>>15 6 10 21 48
>
>
>
>
>
>2012/9/14 Eduardo Leoni <e.leoni em gmail.com>
>
>ifelse quando length é igual a 1 não é recomendável:
>>
>>
>>> system.time(replicate(10000, if(1>0) {1} else { 0}))
>> user system elapsed
>> 0.028 0.000 0.030
>>> system.time(replicate(10000, ifelse(1>0, 1, 0)))
>> user system elapsed
>> 0.224 0.000 0.224
>>>
>>
>>
>>
>>2012/9/14 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>
>>
>>Felipe,
>>>
>>>
>>>Realmente, o if resolve o problema.
>>>
>>>
>>>Só uma dica, troque o if por
>>>
>>>
>>>ifelse(length(temp)>0,resp=max(temp), resp=1)
>>>
>>>
>>>Quanto ao which, vc precisa corrgir!
>>>
>>>
>>>Valeu!
>>>
>>>
>>>
>>> Fábio Mathias Corrêa
>>>
>>>
>>> Universidade Estadual de Santa Cruz
>>>Departamento de Ciências Exatas e da Terra - DCET
>>>
>>>
>>>Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
>>>CEP 45662-900. Ilhéus-Bahia
>>>
>>>
>>>
>>>Tel.: 73-3680-5076
>>>
>>>
>>>________________________________
>>> De: Felipe Buchbinder <felbuch em gmail.com>
>>>Para: r-br em listas.c3sl.ufpr.br
>>>Enviadas: Sexta-feira, 14 de Setembro de 2012 0:12
>>>
>>>Assunto: Re: [R-br] Dúvida função no R
>>>
>>>
>>>
>>>Fábio,
>>>
>>>
>>>Muito obrigado pela ajuda. Mas o if já não dá conta do caso em que p.vec não possui um elemento maior do que seed? E como p.vec é construido dentro de um loop que adiciona um elemento durante k iterações, como ele pode ter mais do que k elementos? Eu achava que já tinha controlado para evitar esses casos... não?
>>>
>>>
>>>mais uma vez obrigado,
>>>
>>>
>>>Felipe
>>>
>>>
>>>2012/9/13 Fabio Mathias Corrêa <fabio.ufla em yahoo.com.br>
>>>
>>>O problema está nesta parte aqui!
>>>>
>>>>
>>>>Nem sempre o vetor p.vec possui um elemento maior que o seed, e quando isto ocorre retorna interger(0)
>>>>
>>>>
>>>>Outro problema é que o which pega a posição do elemento, então, quando vc pega o max(temp), se o vetor tem tamanho 20, por exemplo, ele vai retornar o 20 e não o elemento.
>>>>
>>>>
>>>>Precisa corrigir ai!
>>>>
>>>>
>>>> temp = which(p.vec>seed) #we use this temporary vector in order to avoid warnings should its length be zero
>>>>print(temp)
>>>> if(length(temp)>0){resp=max(temp)}else{resp=1}
>>>>
>>>>
>>>>Valeu!
>>>>
>>>>
>>>> Fábio Mathias Corrêa
>>>>
>>>>
>>>> Universidade Estadual de Santa Cruz
>>>>Departamento de Ciências Exatas e da Terra - DCET
>>>>
>>>>
>>>>Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
>>>>CEP 45662-900. Ilhéus-Bahia
>>>>
>>>>
>>>>
>>>>Tel.: 73-3680-5076
>>>>
>>>>
>>>>________________________________
>>>> De: Felipe Buchbinder <felbuch em gmail.com>
>>>>Para: r-br em listas.c3sl.ufpr.br
>>>>Enviadas: Quinta-feira, 13 de Setembro de 2012 15:24
>>>>Assunto: Re: [R-br] Dúvida função no R
>>>>
>>>>
>>>>
>>>>Obrigado pela referência,
>>>>
>>>>
>>>>Preparei um CMR que envio anexo.
>>>>
>>>>
>>>>Mais uma vez, obrigado
>>>>Felipe
>>>>
>>>>
>>>>2012/9/13 FHRB Toledo <fernandohtoledo em gmail.com>
>>>>
>>>>Felipe,
>>>>>
>>>>>Para CMR, consulte: https://gist.github.com/1088208
>>>>>
>>>>>
>>>>>att,
>>>>>FH
>>>>>
>>>>>
>>>>>
>>>>>2012/9/13 Felipe Buchbinder <felbuch em gmail.com>
>>>>>
>>>>>O k foi definido no início do código, fora da função, como k = 5.
>>>>>>
>>>>>>
>>>>>>Desculpe a ignorância, mas o que é um CMR? Como eu posso fazer um para enviar à lista?
>>>>>>
>>>>>>
>>>>>>Obrigado pela disposição,
>>>>>>
>>>>>>Felipe
>>>>>>
>>>>>>
>>>>>>
>>>>>>2012/9/13 Leonard de Assis <assis.leonard em gmail.com>
>>>>>>
>>>>>>Onde foi definido o k?
>>>>>>>
>>>>>>>[]s
Leonard de Assis
assis <dot> leonard <at> gmail <dot> com
Em 13/09/2012 12:56, Felipe Buchbinder escreveu:
>>>>>>>
>>>>>>>Prezados professores,
>>>>>>>>
>>>>>>>>
>>>>>>>>Estou com um problema em uma função no R.
>>>>>>>>A função é a seguinte:
>>>>>>>>
>>>>>>>>
>>>>>>>>resp <- function(subject,item,trait)
>>>>>>>>>>>{
>>>>>>>>>>>
>>>>>>>>>>> p.vec = NULL
>>>>>>>>>>>
>>>>>>>>>>> for(category in 1:k) # k = 5
>>>>>>>>>>> {
>>>>>>>>>>> p = ogive ( theta[subject,trait] , a[item] ,
b[item,category] , D ) # aqui é uma logit (D=1) ou probit
(D=1.7)
>>>>>>>>>>> p.vec = c(p.vec,p)
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> #Generates a random number
>>>>>>>>>>>
>>>>>>>>>>> seed<-runif(1,0.2,0.8)
>>>>>>>>>>>
>>>>>>>>>>> #Selects an answer
>>>>>>>>>>>
>>>>>>>>>>> temp = which ( p.vec>seed )
>>>>>>>>>>> if( length (temp) > 0 ) { resp = max (temp) } else {
resp = 1 }
>>>>>>>>>>> resp
>>>>>>>>>>>}
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>Esta função está inserida em um loop e deveria me retornar um número inteiro entre 1 e 5.
>>>>>>>>Da primeira vez, isto acontece.
>>>>>>>>Mas a partir da segunda, ela começa a me retornar valores como 20, 16,...
>>>>>>>>
>>>>>>>>
>>>>>>>>Alguma idéia de porque isso acontece???
>>>>>>>>
>>>>>>>>
>>>>>>>>Desde já, obrigado!
>>>>>>>>
>>>>>>>>
>>>>>>>>Felipe Buchbinder
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>_______________________________________________
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.
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>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.
>>>>>>>
>>>>>>
>>>>>>_______________________________________________
>>>>>>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.
>>>>>>
>>>>>
>>>>>_______________________________________________
>>>>>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.
>>>>>
>>>>
>>>>_______________________________________________
>>>>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.
>>>>
>>>>
>>>>_______________________________________________
>>>>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.
>>>>
>>>
>>>_______________________________________________
>>>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.
>>>
>>>
>>>_______________________________________________
>>>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.
>>>
>>
>
>_______________________________________________
>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.
>
_______________________________________________
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/20120915/99939ac0/attachment.html>
Mais detalhes sobre a lista de discussão R-br