2013-04-18 15 views
5

我想寫一個函數,創建動畫圖形(不使用動畫包),用戶可以控制輸入(樣本大小和分佈等.. )證明了中心極限定理。這在理論上是我想要的,但是在編寫用戶可以實際控制輸入的功能時遇到問題,正如我上面提到的那樣。如何寫一個函數,演示中心極限定理與圖形

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

什麼不適合你?期望的結果是什麼? – 2013-04-18 05:27:43

+0

+1爲好的教育例子。我想你正在尋找'readline()'函數。只是不要忘記做一些輸入驗證。 – 2013-04-18 06:01:12

+0

@RomanLuštrik期望的結果就是具有用戶可以控制輸入的整體功能。 – 2013-04-19 17:18:23

回答

2

你不清楚你想要什麼結果。但我認爲,您可以將代碼放入函數中,並使用點參數...作爲給出額外參數(例如分佈參數)的解決方案。

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

可以使用稱之爲:

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

,因爲它沒有爲RNORM例如工作的代碼(你應該修改休息,我認爲),但它應該是一個良好的開端。

+0

謝謝,但是當運行你實現的代碼,並調用central.simul,因爲你建議我得到以下錯誤錯誤「msample [i] < - 意味着(山姆):對象'msample'未找到」 – 2013-04-18 19:20:20

+0

@geneteics_diva我編輯我的答案。我忘記初始化masample矢量。 – agstudy 2013-04-18 21:31:07

+0

再次感謝,我正在削減,因爲某些原因,它仍然無法正常工作: - / – 2013-04-19 01:48:09

相關問題