um exercicio pra matar saudade de recursao...

f <- function(n, menor, maior, x, s){
    obs <- rnorm(n, x, s)
    obs <- obs[obs > menor & obs < maior]
    nin <- length(obs)
    if (nin == n){
        return(obs)
    }else{
        return(c(obs, f(n-nin, menor, maior, x, s)))
    }
}

system.time(res <- f(10000, 2, 3, 0, 1))
##   user  system elapsed 
##  0.063   0.001   0.064 
length(res)
## [1] 10000
range(res)
## [1] 2.000013 2.999675


Em 28 de julho de 2014 23:34, FHRB Toledo <fernandohtoledo@gmail.com> escreveu:
Não seria o caso de você obter esses valores analiticamente, ao invés de usar simulação? Veja a documentação da função pnorm().

att,
FH


2014-07-28 21:14 GMT-05:00 Marcos Bissoli <mbissoli@gmail.com>:
Boa noite a todos,

Preciso gerar uma sequência de números aleatórios, de uma distribuição normal. No entanto, a função <rnorm> não permite definir limites mínimo e máximo para o vetor de dados. Assim, criei uma função para tal fim:

>Gerador.Aleatorio <- function(n,menor,maior,x,s)
+{
+  dados <- rnorm(n,x,s)
+  while ((min(dados)<menor)|(max(dados)>maior))
+  {
+    dados <- rnorm(n,x,s)
+  }
+  dados <- dados
+  print(dados)
+}

Onde:
- n é o número de valores que quero gerar
- menor é o limite mínimo do vetor
- maior é o limite máximo do vetor
- x é a média do vetor
- s é o desvio padrão do vetor

O problema é que, como usei um laço ("loop"), o custo de tempo computacional dessa função tornou-a simplesmente impraticável. Até 100 valores eu consegui gerar. Mas agora tentei com 284 e já jantei, fumei, tratei de assuntos familiares e... Nada! E minha demanda, na verdade, é para gerar mais de 1500 valores, simulando estudo epidemiológico observacional, a partir de valores já descritos em um estudo piloto que realizei (ou seja, eu tenho já estimativas de n, mínimo, máximo, média e desvio padrão).

Há alguma função, pacote ou sintaxe que torne isso possível? E qual seriam esses "limites do custo computacional"?

Grato desde já por qualquer ajuda.

Abraços fraternos,

--
MARCOS BISSOLI
Faculdade de Nutrição
Universidade Federal de Alfenas

E-mail: mbissoli@gmail.com
Twitter: #mbissoli
Facebook: https://www.facebook.com/MarcosBissoli

Alfenas, Minas Gerais, Brasil


*****Pense na Natureza antes de Imprimir*****
Divulgue ON-LINE

Eu apoio a ENEN "na luta por um Brasil sem fome"

"por ĉiu popolo ties propran lingvon, por ĉiuj popoloj la esperantan"
(para cada povo sua própria língua, para todos os povos o Esperanto)

E nunca votarei no PSDB/DEM!

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



--
 
Benilton Carvalho on about.me
 
Benilton Carvalho
about.me/benilton