2016-09-02 41 views
1

我正在使用sample()函數從骰子對象中獲取隨機樣本。R編程:sample()函數返回重複的實體,甚至replace = TRUE

> die 
[1] 1 2 3 4 5 6 
> sample(x=die , size=1 , replace=TRUE) 
[1] 1 
> sample(x=die , size=1 , replace=TRUE) 
[1] 1 
> sample(x=die , size=1 , replace=TRUE) 
[1] 5 
> sample(x=die , size=1 , replace=TRUE) 
[1] 5 
> sample(x=die , size=1 , replace=TRUE) 
[1] 1 
> sample(x=die , size=1 , replace=TRUE) 
[1] 2 
> sample(x=die , size=1 , replace=TRUE) 
[1] 4 

如果你觀察上面的輸出1重複3次和5次重複2次。但從上面的輸出甚至取代TRUE我可以看到頻繁的多重複制。

Ref:我正在看一本書與R動手編程。

如果需要更多信息,請讓我知道。

謝謝。

回答

4

這不是一個統計數據,而是一個編程問題,並且更適合堆棧溢出。

如果您的目標是避免兩次獲取相同的號碼,則不正確地使用sample()。爲避免重複,您需要使用單個命令(size多於1而不是多個命令)並使用replace=FALSE(而不是TRUE)創建樣本。例如:

> sample(x=die , size=4 , replace=FALSE) 
[1] 1 6 4 3 

當然,這不再對應於多個公平擲骰,因爲真正的骰子可以給你在以後的卷數相同。

有關如何使用sample()的完整信息,請參閱幫助頁面?sample

3

如果你拿着真正的骰子並滾動它們,你也會看到重複。無論是否意味着重複,骰子的每一面都有相同的機會出現。

replace=參數根本沒有任何效果,因爲當你繪製骰子的一側後,不管你是否替換骰子,它都沒有區別。 replace=FALSE將防止重複在sample()一個電話。它不會影響sample的下一個呼叫。

+1

而無論是通過共發生與否,他做了7次與六面的骰子............ – 2016-09-02 13:18:44

1

Sample()不會影響後續運行的sample()在同一個向量上。你需要的是一個功能,可以逐步從你正在分析的矢量中刪除你的照片。在這裏我寫了一些類似於它的東西,叫做rsample(),它返回被採用的對象和被剝奪選定對象的新向量。

rsample<-function(x){ 
    taken<-sample(x,size=1) 
    newx<-x[-which(x==taken)[1]] 
    return(list(taken=taken,new=newx)) 
} 
die<-1:6 
obj<-rsample(die) 
obj$taken 
[1] 3 
obj<-rsample(obj$new) 
obj$taken 
[1] 5 
obj<-rsample(obj$new) 
obj$taken 
[1] 2 
obj<-rsample(obj$new) 
obj$taken 
[1] 4 
obj<-rsample(obj$new) 
obj$taken 
[1] 1 
+0

可能是我們可以利用這一點避免重複元素一維矢量數據以及sample()函數作爲矢量長度作爲條件值。 –

+0

爲此您運行unique() –

+0

否,1-D + Sample(),但不重複直到向量長度採樣。希望你能理解。 –