问题来源于一位师妹:
所以,提到set.seed(),你得知道一下内容
- 1.程序生成的随机数是伪随机
- 2.set.seed()是用于产生随机数的,你的程序涉及到了模拟或仿真的算法。括号里的数只是一个编号而已,例如set.seed(100)不应将括号里的数字理解成“一百”,而是应该理解成“编号为一零零的随机数发生”,下一次再模拟可以采用二零零(200)或者一一一(111)等不同的编号即可,编号设定基本可以随意。
- 3 .set.seed()函数目的为了保证你随机生成的随机数前后一致,相同seed编号两次随机的结果是一样的
- 4.在许多涉及到模拟仿真的R包,通常都会set.seed,目的是让你的随机结果和他的一致,让相应的结果复现
- 5.不set.seed(),每次随机出来的随机数都不一样
为了理解这个,你可以在R里面运行下方代码
set.seed(1)
x=rnorm(10)
plot(x)
set.seed(1)
x=rnorm(10)
plot(x)
-->两次运行出来的图是一样的
set.seed(2)
x=rnorm(10)
plot(x)
-->图就变了
所以你不set.seed,你每次随机出来的结果不一样
Q:但是我现在就想问,set.seed()里面填多少比较合适?
A:你看着给
Q:我看着给?
A:set.seed()是用于产生随机数的,一定是你的程序涉及到了模拟或仿真的算法。括号里的数只是一个编号而已,例如set.seed(100)不应将括号里的数字理解成“一百”,而是应该理解成“编号为一零零的随机数发生”,下一次再模拟可以采用二零零(200)或者一一一(111)等不同的编号即可,编号设定基本可以随意。
A:设定随机数种子,一个特定的种子可以产生一个特定的伪随机序列,这个函数的主要目的,是让你的模拟能够可重复出现,因为很多时候我们需要取随机数,但这段代码再跑一次的时候,结果就不一样了,如果需要重复出现同样的模拟结果的话,就可以用set.seed()。在调试程序或者做展示的时候,结果的可重复性是很重要的,所以随机数种子也就很有必要。
Q:那随便写了
参考资料
https://bbs.pinggu.org/thread-2598963-1-1.html
http://www.itdaan.com/blog/2017/11/27/d4a1940635a112330bfc2dd1089d2fcf.html