2013-04-18 9 views
5

Próbuję napisać funkcję, która tworzy animowaną grafikę (bez użycia pakietu animacji), gdzie użytkownicy mogą kontrolować wejścia (wielkość próbki i rozmieszczenie itd.), który demonstruje centralne twierdzenie graniczne. Teoretycznie chciałbym, ale mam problem z napisaniem funkcji, w której użytkownicy mogą faktycznie kontrolować dane wejściowe, o czym wspomniałem powyżej.jak napisać funkcję, która demonstruje centralne twierdzenie graniczne z grafiką

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

Co nie działa dla Ciebie? Jaki jest pożądany rezultat? –

+0

+1 za miły przykład edukacyjny. Chyba szukasz funkcji 'readline()'. Po prostu nie zapomnij o sprawdzeniu danych wejściowych. –

+0

@ RomanLuštrik pożądany wynik ma po prostu pełnić funkcję, w której użytkownicy mogą kontrolować dane wejściowe. –

Odpowiedz

2

Nie jest jasne, czego chcesz jako rezultat. ale myślę, że możesz umieścić kod w funkcji i użyć argumentu kropka ... jako rozwiązanie do nadania dodatkowych parametrów (na przykład parametrów rozkładu).

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) 
     } 
    } 

można wywołać go za pomocą:

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

Kod ponieważ nie działają dla rnorm na przykład (należy zmodyfikować przerwy myślę), ale powinien to być dobry początek.

+0

dziękuję, ale po uruchomieniu kodu zaimplementowanego i wywołującego central.simul zgodnie z sugestią pojawia się następujący błąd Błąd w "msample [i] <- średnia (sam): obiekt" nie znaleziono msample " –

+0

@geneteics_diva i edytuję moją odpowiedź . Zapominam o inicjacji masample vector. – agstudy

+0

Jeszcze raz dziękuję, odpieram, ponieważ z jakiegoś powodu wciąż nie działa: - / –

Powiązane problemy