明白楼主的意思了。
其实问题在于要深入理解一下R里set.seed()的工作原理:想象一个预先生成的随机序列,随机数生成器每次从这个序列头部开始,顺次读取随机数,并输出指定分布的随机数。set.seed()设定种子决定了所取头部的位置。
此时多个随机数函数顺次执行,生成的多个随机数向量是可重复的。
但是改变随机数函数执行顺序之后,随机数元序列顺序有变化,导致生成的随机数序列也不同
比较直观的例子如下, 经过尝试,rnorm生成随机数要消耗两个“元随机数”, runif消耗一个。
生成6个rnorm
和12个runif
之后, 新生成的runif(2,0,1)
就一样了。
set.seed(123)
rnorm(6,0,1)
#> [1] -0.56047565 -0.23017749 1.55870831 0.07050839 0.12928774 1.71506499
runif(2,0,1)
#> [1] 0.6775706 0.5726334
set.seed(123)
runif(12,0,1)
#> [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055
#> [8] 0.8924190 0.5514350 0.4566147 0.9568333 0.4533342
runif(2,0,1)
#> [1] 0.6775706 0.5726334
<sup>Created on 2022-06-14 by the reprex package (v2.0.1)</sup>