【4.1】R生成随机数

这几天需要模拟一些数据来作图,顺道整理一下R中生成随机数的几个函数rnorm,runif,

一、服从正态分布的随机数

rnorm(n,mean=0,sd=1)

如果想要生成一个长度为10的向量,向量中的每个值服从标准正态分布,那么可以这样写

> rnorm(10)  
 [1] -0.7125585  2.2070410  1.4730548 -0.6655749  0.5349409 -0.9700122  0.4970766  
 [8] -1.7385672  0.9300553 -0.4663140  

也可以这样:

> rnorm(10,mean=1,sd=4)  
 [1] -2.520978  3.567172  1.099416  1.029909 -1.239032  1.363111  0.670465  
 [8]  4.015274 -7.095845  3.050106  

其中mean表示均值,sd表示标准差。 此外,还有其他三个函数,dnorm,pnorm,qnorm。在如上两种基本用法中只是名字有所不同,效果是一样的。当然这三个函数还有自己相应的特殊用法,可以通过help(dnorm)进行查询。

dnorm(x, mean = 0, sd = 1, log = FALSE)
pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
rnorm(n, mean = 0, sd = 1)

二、服从均匀分布的随机数

runif(n, min = 0, max = 1)

生成一个长度为10的向量,向量中的每个值服从0~1区间上的均匀分布,那么可以这样写

> runif(10)  
 [1] 0.68835411 0.14208554 0.53551407 0.30101879 0.64202722 0.06249627 0.80834355  
 [8] 0.26193046 0.90841919 0.94294355  

也可以生成其他区间上的随机数,例如:

> runif(10,min=5,max=10)  
 [1] 7.771348 8.747055 8.721152 7.517620 6.084385 5.209369 5.532953 5.845175  
 [9] 6.683199 9.708647  

同样的,runif也有其他三个函数,dunif,punif,qunif。

三、Sample

生成一个1到10之间的随机整数

> sample(1:10, 1)
[1] 6

要生成多个随机数,我们必须增加一个额外的参数,表示允许重复

> sample(1:10, 5, replace=T)
[1] 4 5 5 8 7
> sample(1:10, 5, replace=F)
[1] 7 5 1 2 9
> sample(state.name, 10)
 [1] "Rhode Island"  "Alaska"        "Michigan"      "Maryland"      "West Virginia" "Vermont"      
 [7] "Tennessee"     "Nevada"        "South Dakota"  "Delaware"

四、其他

除了生成最常见的均匀分布随机数和正态分布随机数,R还提供了其他各种函数用以生成服从不同分布的随机数,常见的函数如下:

rexp 指数分布
rf F分布
rgamma Gamma分布
rgeom 几何分布
rhyper 超几何分布
rlnorm 对数正态分布
rlogis Logistic分布
rmultinom 多项分布
rnbinom 负二项分布
rpois 泊松分布
rt t分布
rchisq 卡方分布

参考资料:

http://blog.csdn.net/zhyoulun/article/details/46413727

http://blog.sina.com.cn/s/blog_4b9acb5201016z68.html

R中help(rnorm)

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn