问题
从1~10随机有放回选7个数,求10恰好出现2次的概率.分别作理论和模拟分析
直接R模拟(大数定律)
doubleten<-function(n){
m<-0
for (i in 1:n) {
u<-runif(7)
x<-floor(u*10)+1
if(sum(x==10)==2){m=m+1}
}
rt<-c('两个10的概率'=m/n);rt
}
doubleten(10000)
其中函数说明
sum
是不是很奇怪为什么这里sum实现了统计某个值个数的操作!!!!
下面是官网文档,没有显示特别的关于统计某个值个数的操作。
Description
sum returns the sum of all the values present in its arguments.
Usage
sum(…, na.rm = FALSE)
Arguments…
numeric or complex or logical vectors.
na.rm
logical. Should missing values (including NaN) be removed?
ExamplesPass a vector to sum, and it will add the elements together.
sum(1:5)Pass several numbers to sum, and it also adds the elements.
sum(1, 2, 3, 4, 5)In fact, you can pass vectors into several arguments, and everything gets added.
sum(1:2, 3:5)If there are missing values, the sum is unknown, i.e., also missing, ….
sum(1:5, NA)
… unless we exclude missing values explicitly:
sum(1:5, NA, na.rm = TRUE)
调试分析,原来原因如下
> a<-c(1,2,2,3,3,3)
> a==3
[1] FALSE FALSE FALSE TRUE TRUE TRUE
> sum(a==3)
[1] 3
赞叹此法真的巧妙!!!
运行结果
> doubleten<-function(n){
+ m<-0
+ for (i in 1:n) {
+ u<-runif(7)
+ x<-floor(u*10)+1
+ if(sum(x==10)==2){m=m+1}
+ }
+ rt<-c('两个10的概率'=m/n);rt
+ }
> doubleten(10000)
两个10的概率
0.122