[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