2012-08-26 69 views
2

我從含有許多值的列表的文件採樣的R循環,例如:構建爲隨機採樣

312313.34 
243444 
12334.92 
321312 
353532 

和,使用R隨機地從該列表中進行採樣:

list = read.table("data") 
out <-sample(list,50,replace=TRUE) 
out.mean<-mean(out) 
out.mean 

可能有人請告訴我如何將它放入一個循環中,以便我可以執行此過程1000次,並採用這意味着這將產生的意思?

非常感謝您提前!

Rubal

+0

[from given distribution](http://stackoverflow.com/questions/12128996/sample-from-given-distribution) – Andrie

回答

7

另一種解決方案可能是(記住什麼@Tyler林克剛纔關於replicate

Data <- read.table(text=' 
312313.34 
243444 
12334.92 
321312 
353532', header=FALSE) 

Data <- as.numeric(as.matrix((Data))) 

set.seed(007) 
Means <- replicate(1000, mean(sample(Data,50,replace=TRUE))) 

手段包括1000平均每一個用於大小爲50的每個子樣本。如果您想要這樣做的意思是:

mean(Means) 

你試圖做的事情聽起來像一個引導或類似的重採樣技術偏見減少(我猜)。

5

我會成爲一個功能出了取樣,然後重複一遍又一遍地用lapply(雖然replicate可能會工作太我有經驗,這個是慢得多)

我建議不要寫入名爲list的對象,因爲這是一個重要功能。

因此,這將是這個樣子:

#make a data set that may look like yours 
LIST <- rnorm(1000) 

#take your code and make a function 
mean.find <- function(dat) { 
    out <-sample(dat, 50,replace=TRUE) 
    mean(out) 
} 

#a single use yo check it out 
mean.find(LIST) 

#repeat it 1000 times with lapply 
reps <- unlist(lapply(seq_len(1000), mean.find)) 

#take the mean of that 
mean(reps) 
+0

+1和一些挑剔;)。函數「mean.find」有一個不使用的輸入參數:'dat'。最好是要麼忽略它,要麼用'out <-sample(dat,50,replace = TRUE)'。這使得函數更一般化,你可以爲任何數據集獲得50個樣本,代碼不依賴於找到全局變量calldd'LIST'的範圍。 –

+0

@保羅良好的捕獲,這是我的意圖,但我從未貫徹過。我按照你的建議做了編輯。 'nitpicking = growth':D –

+0

從函數內部使用全局對象會讓我有點不安,儘管我非常使用它。簡而言之,風險可能很小,但在較大的項目中可能會導致不可預測的行爲。 –