2014-10-03 60 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