Dúvida função no R

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

Um CMR ajudaria! 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@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Quinta-feira, 13 de Setembro de 2012 12:56 Assunto: [R-br] Dúvida função no R 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@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.

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

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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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.

Felipe, Para CMR, consulte: https://gist.github.com/1088208 att, FH 2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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.

Obrigado pela referência, Preparei um CMR que envio anexo. Mais uma vez, obrigado Felipe 2012/9/13 FHRB Toledo <fernandohtoledo@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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.

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@gmail.com> Para: r-br@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@gmail.com> Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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@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@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@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@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@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.

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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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.

Tem certeza que o $k$ não está sendo redefinido em algum lugar e que sempre length(p)=1? 2012/9/14 Felipe Buchbinder <felbuch@gmail.com>
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

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@gmail.com> Para: r-br@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@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@gmail.com> Para: r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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@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@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@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@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@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@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@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.

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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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.

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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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.

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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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.

*Felipe, * * * *pelo que entendi você esta considerando modelos de teoria de resposta ao item certo? E dados os parâmetros e o score simulado irá obter o padrão de respostas certo?* * * Em 14 de setembro de 2012 23:00, Felipe Buchbinder <felbuch@gmail.com>escreveu:
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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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.

certo 2012/9/14 Leandro Marino <leandromarino@leandromarino.com.br>
*Felipe, * * * *pelo que entendi você esta considerando modelos de teoria de resposta ao item certo? E dados os parâmetros e o score simulado irá obter o padrão de respostas certo?* * * Em 14 de setembro de 2012 23:00, Felipe Buchbinder <felbuch@gmail.com>escreveu:
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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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.

*Tenho algo que fiz e está bem implementado* * * * PudT <- function(Theta,ai,bi,ci,D){ PudT <- ci + (1-ci)/(1 + exp(-D*ai*(Theta-bi))) PudT } parit <- data.frame(id= ..., a = ..., b=..., c=....) respo <- matrix(ncol=nitem,nrow=nalu) for(k in 1:nitem){ respo[,k] <- as.integer(PudT( Theta = [,2], ai = parit[k,'a'], bi = parit[k,'b'], ci = parit[k,'c'], D = 1) > runif(nalu,0,1)) } * Em 14 de setembro de 2012 23:30, Felipe Buchbinder <felbuch@gmail.com>escreveu:
certo
2012/9/14 Leandro Marino <leandromarino@leandromarino.com.br>
*Felipe, * * * *pelo que entendi você esta considerando modelos de teoria de resposta ao item certo? E dados os parâmetros e o score simulado irá obter o padrão de respostas certo?* * * Em 14 de setembro de 2012 23:00, Felipe Buchbinder <felbuch@gmail.com>escreveu:
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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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@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.

Coloque o código completo, com dados. 2012/9/14 Felipe Buchbinder <felbuch@gmail.com>
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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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.

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@gmail.com> Para: r-br@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@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@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@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@gmail.com> Para: r-br@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@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@gmail.com> Para: r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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@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@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@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@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@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@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@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@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@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@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.

O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação: O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit. Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5. Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo. Mais uma vez, muito obrigado, Felipe 2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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@gmail.com> *Para:* r-br@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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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.

Aqui no meu computador:
sessionInfo() R version 2.15.1 (2012-06-22) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] psy_1.1 ltm_0.9-8 [3] msm_1.1.2 random.polychor.pa_1.1.3.2 [5] nFactors_2.3.3 lattice_0.20-6 [7] boot_1.3-4 MASS_7.3-18 [9] psych_1.2.8 polycor_0.7-8 [11] sfsmisc_1.0-20 mvtnorm_0.9-9992 loaded via a namespace (and not attached): [1] grid_2.15.1 splines_2.15.1 survival_2.36-14 tools_2.15.1
o erro aparece quando a função grm (na verdade o call pra optim dentro dela) é chamada. É isso aí também? 2012/9/15 Felipe Buchbinder <felbuch@gmail.com>
O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação:
O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit.
Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5.
Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo.
Mais uma vez, muito obrigado,
Felipe
2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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@gmail.com> *Para:* r-br@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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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@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.

Eduardo, Aqui o erro também aparece quando a função grm é chamada. No meu computador:
sessionInfo()
R version 2.12.1 (2010-12-16) Platform: x86_64-pc-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices datasets utils methods base other attached packages: [1] psy_1.0 ltm_0.9-7 msm_1.1 random.polychor.pa_1.1.3 nFactors_2.3.2 [6] lattice_0.19-13 boot_1.2-43 MASS_7.3-9 psych_1.1.10 polycor_0.7-8 [11] sfsmisc_1.0-18 mvtnorm_0.9-9991 loaded via a namespace (and not attached): [1] grid_2.12.1 splines_2.12.1 survival_2.36-2 tools_2.12.1 2012/9/15 Eduardo Leoni <e.leoni@gmail.com>
Aqui no meu computador:
sessionInfo() R version 2.15.1 (2012-06-22) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages: [1] stats graphics grDevices utils datasets methods base
other attached packages: [1] psy_1.1 ltm_0.9-8 [3] msm_1.1.2 random.polychor.pa_1.1.3.2 [5] nFactors_2.3.3 lattice_0.20-6 [7] boot_1.3-4 MASS_7.3-18 [9] psych_1.2.8 polycor_0.7-8 [11] sfsmisc_1.0-20 mvtnorm_0.9-9992
loaded via a namespace (and not attached): [1] grid_2.15.1 splines_2.15.1 survival_2.36-14 tools_2.15.1
o erro aparece quando a função grm (na verdade o call pra optim dentro dela) é chamada. É isso aí também?
2012/9/15 Felipe Buchbinder <felbuch@gmail.com>
O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação:
O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit.
Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5.
Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo.
Mais uma vez, muito obrigado,
Felipe
2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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@gmail.com> *Para:* r-br@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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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@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@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.

Felipe, Creio que seu problema foi resolvido! Porque no primeiro laço das simulações não dá problema na matriz SOR? Bom, no primeiro laço a sua variável D = 1. E logo abaixo ela recebe os valores D <- c(3,8,9,10) #Difficult items Quando o D passa de um vetor de tamanho 1 para um vetor de tamanho 4, o vetor p.vec é incrementado e pode ficar com tamanho de 20 ou mais. p = ogive(theta[subject,trait],a[item],b[item,categ],D) p.vec = c(p.vec,p) Veja um exemplo do porque o vetor fica incrementado. ogive(1,2,3,c(1:5)) # Aqui o vetor de saída tem tamanho 5. ogive(1,2,3,5) # Aqui o vetor de saída tem tamanho 1. Então o p.vec vai sendo incrementado de 5 em 5, da forma em que estava. Tem um outro detalhe, se vc colocar uma matriz muito grande, as suas simulações irão demorar muito! Tem muita coisa que pode ser melhorada em termos otimização! Sumscale<-c(Sumscale,mean(input_matrix[i,])) # Aqui vc pode utilizar um rowMeans() A função ogive não precisa ser construída dentro do laço das simulações. Coloque ela fora, basta fazer chamar ela apenas uma vez fora do laço das simulações. Tinha elementos da resp que não eram chamados na função, ficavam soltos, isso não é bom! Alterei os elementos de chamada dela. resp<-function(subject,item,trait,theta,a,b,D) { #Calculate the probability of each category p.vec = NULL for(categ in 1:k) #For each category, calculate: { p = ogive(theta[subject,trait],a[item],b[item,categ],D) 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) #we use this temporary vector in order to avoid warnings should its length be zero if(length(temp)>0){resp=max(temp)}else{resp=1} resp } 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@gmail.com> Para: r-br@listas.c3sl.ufpr.br; Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br> Enviadas: Sábado, 15 de Setembro de 2012 15:03 Assunto: Re: [R-br] Dúvida função no R O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação: O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit. Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5. Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo. Mais uma vez, muito obrigado, Felipe 2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br> 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@gmail.com> Para: r-br@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@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@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@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@gmail.com> Para: r-br@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@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@gmail.com> Para: r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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@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@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@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@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@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@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@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@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@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@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@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.

Isto realmente resolve boa parte do problema. Muito obrigado, especialmente ao Eduardo, ao Fabio e ao Leandro!!! Porém, a função grm continua dando "out of bounds" às vezes, mas o SOR já está resolvido. Alguém tiver alguma idéia do que pode estar dando este problema? Mais uma vez obrigado!!! Felipe 2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
Felipe,
Creio que seu problema foi resolvido!
Porque no primeiro laço das simulações não dá problema na matriz SOR?
Bom, no primeiro laço a sua variável D = 1.
E logo abaixo ela recebe os valores D <- c(3,8,9,10) #Difficult items
Quando o D passa de um vetor de tamanho 1 para um vetor de tamanho 4, o vetor p.vec é incrementado e pode ficar com tamanho de 20 ou mais.
p = ogive(theta[subject,trait],a[item],b[item,categ],D) p.vec = c(p.vec,p)
Veja um exemplo do porque o vetor fica incrementado.
ogive(1,2,3,c(1:5)) # Aqui o vetor de saída tem tamanho 5.
ogive(1,2,3,5) # Aqui o vetor de saída tem tamanho 1.
Então o p.vec vai sendo incrementado de 5 em 5, da forma em que estava.
Tem um outro detalhe, se vc colocar uma matriz muito grande, as suas simulações irão demorar muito! Tem muita coisa que pode ser melhorada em termos otimização!
Sumscale<-c(Sumscale,mean(input_matrix[i,])) # Aqui vc pode utilizar um rowMeans()
A função ogive não precisa ser construída dentro do laço das simulações. Coloque ela fora, basta fazer chamar ela apenas uma vez fora do laço das simulações.
Tinha elementos da resp que não eram chamados na função, ficavam soltos, isso não é bom!
Alterei os elementos de chamada dela.
resp<-function(subject,item,trait,theta,a,b,D) { #Calculate the probability of each category
p.vec = NULL
for(categ in 1:k) #For each category, calculate: { p = ogive(theta[subject,trait],a[item],b[item,categ],D) 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) #we use this temporary vector in order to avoid warnings should its length be zero if(length(temp)>0){resp=max(temp)}else{resp=1} resp }
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@gmail.com> *Para:* r-br@listas.c3sl.ufpr.br; Fabio Mathias Corrêa < fabio.ufla@yahoo.com.br> *Enviadas:* Sábado, 15 de Setembro de 2012 15:03
*Assunto:* Re: [R-br] Dúvida função no R
O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação:
O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit.
Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5.
Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo.
Mais uma vez, muito obrigado,
Felipe
2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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@gmail.com> *Para:* r-br@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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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@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.

Já resolvi o "out of bounds". Mais uma vez, muito obrigado a todos!!! Felipe 2012/9/16 Felipe Buchbinder <felbuch@gmail.com>
Isto realmente resolve boa parte do problema. Muito obrigado, especialmente ao Eduardo, ao Fabio e ao Leandro!!!
Porém, a função grm continua dando "out of bounds" às vezes, mas o SOR já está resolvido.
Alguém tiver alguma idéia do que pode estar dando este problema?
Mais uma vez obrigado!!!
Felipe
2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
Felipe,
Creio que seu problema foi resolvido!
Porque no primeiro laço das simulações não dá problema na matriz SOR?
Bom, no primeiro laço a sua variável D = 1.
E logo abaixo ela recebe os valores D <- c(3,8,9,10) #Difficult items
Quando o D passa de um vetor de tamanho 1 para um vetor de tamanho 4, o vetor p.vec é incrementado e pode ficar com tamanho de 20 ou mais.
p = ogive(theta[subject,trait],a[item],b[item,categ],D) p.vec = c(p.vec,p)
Veja um exemplo do porque o vetor fica incrementado.
ogive(1,2,3,c(1:5)) # Aqui o vetor de saída tem tamanho 5.
ogive(1,2,3,5) # Aqui o vetor de saída tem tamanho 1.
Então o p.vec vai sendo incrementado de 5 em 5, da forma em que estava.
Tem um outro detalhe, se vc colocar uma matriz muito grande, as suas simulações irão demorar muito! Tem muita coisa que pode ser melhorada em termos otimização!
Sumscale<-c(Sumscale,mean(input_matrix[i,])) # Aqui vc pode utilizar um rowMeans()
A função ogive não precisa ser construída dentro do laço das simulações. Coloque ela fora, basta fazer chamar ela apenas uma vez fora do laço das simulações.
Tinha elementos da resp que não eram chamados na função, ficavam soltos, isso não é bom!
Alterei os elementos de chamada dela.
resp<-function(subject,item,trait,theta,a,b,D) { #Calculate the probability of each category
p.vec = NULL
for(categ in 1:k) #For each category, calculate: { p = ogive(theta[subject,trait],a[item],b[item,categ],D) 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) #we use this temporary vector in order to avoid warnings should its length be zero if(length(temp)>0){resp=max(temp)}else{resp=1} resp }
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@gmail.com> *Para:* r-br@listas.c3sl.ufpr.br; Fabio Mathias Corrêa < fabio.ufla@yahoo.com.br> *Enviadas:* Sábado, 15 de Setembro de 2012 15:03
*Assunto:* Re: [R-br] Dúvida função no R
O que eu preciso fazer é exatamente o que o Eduardo fez, com uma modificação:
O $p$, ao invés de ser um número gerado aleatoriamente, é o resultado de uma função logit.
Obviamente, o resultado de uma logit é um número entre 0 e 1, então a solução do Eduardo é muito próxima do que eu preciso. Mas quando eu substituo o "runif(1)" pela minha função logística, os resultados deixam se ser entre 1 e 5.
Por que isso pode estar ocorrendo? Aproveito e envio o código inteiro anexo.
Mais uma vez, muito obrigado,
Felipe
2012/9/15 Fabio Mathias Corrêa <fabio.ufla@yahoo.com.br>
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@gmail.com> *Para:* r-br@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@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@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@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@gmail.com> *Para:* r-br@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@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@gmail.com> *Para:* r-br@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@gmail.com>
Felipe,
Para CMR, consulte: https://gist.github.com/1088208
att, FH
2012/9/13 Felipe Buchbinder <felbuch@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@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 listR-br@listas.c3sl.ufpr.brhttps://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@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@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@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@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@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@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@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@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@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@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@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.

Pode mandar o script completo para ver como resolveu? Já resolvi o "out of bounds". Mais uma vez, muito obrigado a todos!!! Felipe 2012/9/16 Felipe Buchbinder <felbuch@gmail.com> Isto realmente resolve boa parte do problema. Muito obrigado, especialmente ao Eduardo, ao Fabio e ao Leandro!!! Porém, a função grm continua dando "out of bounds" às vezes, mas o SOR já está resolvido. Alguém tiver alguma idéia do que pode estar dando este problema? Mais uma vez obrigado!!! Felipe

Mauro, Eu estava definindo D como um parâmetro da ogiva (D = 1 para logística ou D = 1.7 para normal) e, depois, definia D como o conjunto de perguntas difíceis do teste (um vetor). Isto estava dando problemas quando o loop retornava e D não era mais 1, mas sim um vetor! Depois de resolver isso, passei a ter problemas de "out of bounds" na função grm e em factor.scores. A solução para o "out of bounds" foi transformar o argumento da função grm em um fator (como uma matriz, não estava funcionando). Na matriz factor.scores, eu usei o parâmetro resp.patterns como um fator, não como a matriz. Envio o script anexo. abs Felipe 2012/9/16 Mauro Sznelwar <sznelwar@uol.com.br>
**
*Pode mandar o script completo para ver como resolveu?*
Já resolvi o "out of bounds".
Mais uma vez, muito obrigado a todos!!!
Felipe
2012/9/16 Felipe Buchbinder <felbuch@gmail.com>
Isto realmente resolve boa parte do problema. Muito obrigado, especialmente ao Eduardo, ao Fabio e ao Leandro!!!
Porém, a função grm continua dando "out of bounds" às vezes, mas o SOR já está resolvido.
Alguém tiver alguma idéia do que pode estar dando este problema?
Mais uma vez obrigado!!!
Felipe
_______________________________________________ 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.
participantes (7)
-
Eduardo Leoni
-
Fabio Mathias Corrêa
-
Felipe Buchbinder
-
FHRB Toledo
-
Leandro Marino
-
Leonard de Assis
-
Mauro Sznelwar