2016-09-22 195 views
0

所以這段代碼是在我們學校發佈的,它是衆多例子之一(滾動公平骰子的模型)。需要幫助翻譯這段代碼

x<-runif(1) 
y<-as.double(x<=c(1/6,2/6,3/6,4/6,5/6,1))*(1:6) 
x<-min(y[y>0]) 

我無法理解此代碼與滾動骰子的關係。

所以第一行生成一個0到1之間隨機均勻分佈的數字x。 在第二行中,我們將一個條件放到x中:如果它的矢量分量小於1(1/6,2/6,3/6,4/6,5/6,1)我們得到TRUE = 1,否則FALSE = 0。

然後這個結果乘以向量(1,2,3,4,5,6)。 最後我們取該矢量乘積的最小值(必須大於零)。

我無法得到這個背後的直覺。這裏有人想介紹這個代碼與現實生活中擲骰子的關係。林困惑..

回答

1

因此,擲骰子每個數字有相同的概率1/6出現。

現在要做的是模擬擲骰子。

因此,在第一行中生成0和1之間的隨機數。

它與它相比的間隔都是相同的大小,它們的長度爲1/6。 因爲,對於x位於這些區間之一中的概率再次是1/6。 那麼在第三行中完成的工作就是查找x落在哪個區間。

讓我們舉個例子吧: 假設x是0.25。 然後第二行的載體應該是這樣的:

FALSE, TRUE, TRUE, TRUE , TRUE, TRUE 

與乘法器你:

0, 2, 3, 4, 5, 6 

因此,在年底x等於2

因此,在這末端x應該是骰子顯示的數字

+0

所以讓我困惑的是: 1.爲什麼我們的隨機生成的數字x介於0和1之間?它可能是在其他一些隨機選擇的時間間隔? 2.爲什麼我們使用矢量(1/6,2/6,3/6,4/6,5/6,1)?你的意思是同樣大小的?你的意思是2/6-1/6 = 1/6和3/6-2/6 = 1/6等嗎?這讓我在與骰子的關係中仍然感到困惑。 3.然後我們用(1,2,3,4,5,6)乘以這個向量?這個矢量看起來像骰子的結果?但爲什麼然後我們選擇該矢量產品的最小值?那背後的原因是什麼? – Biggiez

+0

要回答你的問題: 1.是的,你可以選擇任何其他間隔。模擬骰子很重要的是單位分佈的應用。您也可以使用從1到2的間隔,並將其分隔爲6個相同長度的間隔。 2.使用該向量,由於您的間隔,隨機數來自。是的,那就是我的意思,每個區間的長度都是1/6。 3.這個問題回答了這個例子嗎? –

0

本傑明是對的基本上你的代碼是說

如果runif(1)= 0到1/6 =模切輥= 1個

runif(1)= 1/6至2/6 =模切輥= 2

runif(1)= 2/6至3/6 =模切輥= 3

由於第二行返回結果的矢量在x < -min(Y [Y> 0])只是返回第一正這是你模具輥

+0

好的,但爲什麼我們然後選擇滿足x <-min(y[y> 0])j的那些值的最小值?爲什麼不能成爲另一個選擇的價值? – Biggiez

+0

如果你同意x在2/6和3/6之間意味着在你的第二行代碼中它所做的3次滾動(實際上讓x爲3/6,如0.5),我們知道4/6, 5/6和6/6(或1)都大於3/6,因此當詢問x> 3/6,4/6,5/6和1(在R TRUE = 1和FALSE = 0時記住)時返回TRUE,所以你得到:0,0,1,1,1,1這是乘以模具輥(1,2,3,4,5,6),所以第二行返回模具輥3,4,5,6並且我們知道x是在2/6和3/6之間,3的卷是正確的選擇,這是最小的。 – MorganBall