2013-04-18 10 views
5

Sto provando a scrivere una funzione che crea grafica animata (senza usare il pacchetto di animazione) dove gli utenti possono controllare gli input (dimensione del campione e distribuzione ecc ..) che dimostra il teorema del limite centrale. Questo è ciò che in teoria vorrei, ma avendo problemi con la scrittura della funzione in cui gli utenti possono effettivamente controllare gli input come ho detto sopra.come scrivere una funzione che dimostra il teorema del limite centrale con la grafica

msample <- NA # set up empty vector 
ns <-3 # sample size 
for(i in 1:500){ 
sam <- runif(ns) * 10 # draw sample 
msample[i] <- mean(sam) # save mean of sample 
h <- hist(msample, breaks=seq(0,10, len=50), # histogram of all means 
xlim=c(0,10), col=grey(.9), 
xlab="", main="Central Limit Theorem", border="blue", las=1) 
points(sam, rep(max(h$count), length(sam)), 
pch=16, col=grey(.2)) # add sampled values 
points(msample[i], max(h$count), # add sample mean value 
col="red", pch=15) 
text(10, max(h$count), paste("sample no", i)) 
hist(msample[i], breaks=seq(0,10, len=50), # ovelay sample mean 
xlim=c(0,10), col="red", add=T, # in histogram 
xlab="", border="white", las=1) 
Sys.sleep(.05) 
} 
+0

Che cosa non funziona per voi? Qual è il risultato desiderato? –

+0

+1 per il bel esempio educativo. Immagino tu stia cercando la funzione 'readline()'. Basta non dimenticare di fare qualche convalida dell'input. –

+0

@ RomanLuštrik il risultato desiderato è solo quello di avere una funzione generale in cui gli utenti possono controllare gli input. –

risposta

2

Non è chiaro cosa vuoi come risultato. ma penso che sia possibile inserire il codice in una funzione e utilizzare l'argomento punto ... come soluzione per fornire parametri aggiuntivi (ad esempio, i parametri di distribuzione).

central.simul <- function(N, ns,type = c("runif", "rnorm", "rbinom"),...){ 
     type <- match.arg(type) 
     msample <- rep(NA,N) ## EDIT here: intialisation 
     for(i in 1:N){ 
      sam <- switch(type, 
         runif = runif(ns)*10, 
         rnorm = rnorm(ns)*10, 
         rbinom = rbinom(ns,...)) 
      msample[i] <- mean(sam) # save mean of sample 
      add.hist <- i > 1 
      h <- hist(msample, breaks=seq(0,10, len=50), # histogram of all means 
        xlim=c(0,10), col=grey(.9), 
        xlab="", main="Central Limit Theorem", border="blue", las=1,add=add.hist) 
      points(sam, rep(max(h$count), length(sam)), 
       pch=16, col=grey(.2)) # add sampled values 
      points(msample[i], max(h$count), # add sample mean value 
       col="red", pch=15) 
      text(10, max(h$count), paste0("sample no ", i)) 
      hist(msample[i], breaks=seq(0,10, len=50), # ovelay sample mean 
       xlim=c(0,10), col="red", add=T, # in histogram 
       xlab="", border="white", las=1) 
      Sys.sleep(.1) 
     } 
    } 

Si può chiamare usando:

central.simul(10,3,'runif') 
central.simul(10,3,'rbinom',size=2,prob=0.5) 

Il codice in quanto non funziona per RNorm per esempio (si dovrebbe modificare le pause credo), ma dovrebbe essere un buon inizio.

+0

grazie ma quando si esegue il codice implementato e si chiama central.simul come suggerito, ottengo il seguente errore Errore in "msample [i] <- mean (sam): oggetto" msample "non trovato" –

+0

@geneteics_diva modifica la mia risposta . Ho dimenticato di avviare il vettore del Masample. – agstudy

+0

grazie ancora, sto saltando via perché per qualche motivo non funziona ancora: - / –

Problemi correlati