前言:在很多情況下,我們編程時(shí)經(jīng)常需要生成一組隨機(jī)的數(shù)字,然而,如果一組隨機(jī)數(shù)字可以使程序運(yùn)行成功,但是另一組卻不行的時(shí)候,我們?nèi)绾斡涗浵履苁钩绦虺晒\(yùn)行的那組數(shù)字呢?這便是set.seed()函數(shù)的作用。
舉例:
使用R語言,生成一組隨機(jī)數(shù)字:
> r1 <- rnorm(8) #生成8個(gè)隨機(jī)數(shù)字
> r1
[1] -0.67509798 -0.65516676 1.49228122 0.12893907 -1.00610101 -0.97784519 -1.04227771 -0.04797154
> r2 <- rnorm(8) #再生成一組隨機(jī)數(shù)字
> r2
[1] -0.8493402 -0.6088733 0.2030056 -0.6535025 -0.8949186 -0.5006307 0.2353578 -0.2134360
可以看出,每次生成的隨機(jī)數(shù)字是不完全相同的,如果我想得到可重復(fù)的結(jié)果,就可以用到set.seed()方法:
> set.seed(5000) #種子數(shù)可為隨意整數(shù)
> r1 <- rnorm(8)
> r1
[1] -0.1301591 -1.1406151 -2.1843771 0.7650218 -0.4735296 -0.3980398 1.0382221 -1.0565153
> set.seed(5000) #設(shè)置同樣的種子
> r2 <- rnorm(8)
> r2
[1] -0.1301591 -1.1406151 -2.1843771 0.7650218 -0.4735296 -0.3980398 1.0382221 -1.0565153
說明:
眾所周知,計(jì)算機(jī)并不能產(chǎn)生真正意義的隨機(jī)數(shù),計(jì)算機(jī)的隨機(jī)功能是使用系統(tǒng)時(shí)鐘來作為種子,如果你要模擬什么的話,每次的隨機(jī)數(shù)都是不一樣的。如果你事先設(shè)置了種子,這樣每次的隨機(jī)數(shù)都是一樣的,便于重現(xiàn)你的研究,也便于其他人檢驗(yàn)?zāi)愕姆治鼋Y(jié)果。舉例中的set.seed(5000)的含義便是而是把種子設(shè)置為5000,而不再使用系統(tǒng)時(shí)鐘。