2014-10-03 59 views
-6

這是我所做的。我需要5個隨機數,所以第一個命令是好的。之後,我想了解概率公式,但是我無法正確寫入。 我需要找到五個隨機數中每一個的概率。之後,我需要找到1中的所有N個數的概率89,做這樣一個在這裏的圖形..如何使用..命令

+1

爲什麼在這個問題上刪除代碼? – 2014-10-04 15:18:10

+0

@MatthewLundberg這是錯的 – user3009403 2014-10-05 12:57:44

+0

但它顯示了你正在嘗試,這有助於很多。 – 2014-10-08 21:49:54

回答

0

你在你的函數有一個額外的括號,應

b <- function(n){ 
    x<- prod(1:365) 
    P <- ((x)/(365^n)*(prod(1:365-n))) 
    Pn <- 1-P 
} 
+0

你不需要'return'來返回結果。這有點誤導 – 2014-10-03 19:54:41

+0

好點,謝謝 – Stedy 2014-10-03 19:55:35

+0

'b < - function(n){x < - prod(1:365); 1 - ((x)/(365^n)*(prod(1:365-n)))}' – 2014-10-03 19:57:22

2

prod(1:365)(例如,365!)評估爲Inf,所以這不起作用。相反,使用此:

b <- function(n) 1 - prod(365:(365-(n-1))/365) 

這需要兩個事實的優點:

  1. 365 /(365-N)! = prod(365,364,...,365-(n-1)),即只有n個項的乘積。
  2. 其中每個術語除以365(通過分母中的365^n)。

所以結果與prod(1,364/365,363/365,...,(365-(n-1))/ 365))相同。這個產品是可計算的。

但還有一個額外的問題:在plot(...)中使用此函數時,它必須是「向量化的」,也就是說它必須將一個向量作爲參數並返回一個長度與結果相同的向量。要做到這一點,使用Vectorize(...)功能R.

b <- Vectorize(function(n) 1 - prod(365:(365-(n-1))/365)) 

現在你可以使用plot(...)

plot(1:89,b(1:89), type="l") 

+0

上面定義了'b(...)','b (5:50,5))' – jlhoward 2014-10-03 20:31:11

+0

你真的需要閱讀R的介紹。[This](http://www.statmethods.net/)是一個很好的例子。使用:'s < - sample(5:50,5); data.frame(n = s,Pn = b(s))'這將顯示一個n對Pn的表格。 – jlhoward 2014-10-03 20:51:33

+0

使用這些命令得到這個錯誤:'> s < - sample(5:50,5) > s [1] 37 36 41 8 31 > data.frame(n = s,Pn = b(s)) ñ光合速率 1 37 0.848734 2 36 0.848734 3 41 0.848734 4 8 0.848734 5 31 0.848734 警告消息: 在365:(365 - (N - 1)): 數值表達式具有5個元素:僅第一次使用 ' – user3009403 2014-10-04 08:48:31