【发布时间】:2013-08-13 17:36:15
【问题描述】:
我正在尝试了解set.seed 在 R 中的工作原理。我了解它,可以重现随机样本,但我不知道 set.seed(1) 和 set.seed(123) 之间有什么区别?
括号中的参数是什么意思?
【问题讨论】:
标签: r
我正在尝试了解set.seed 在 R 中的工作原理。我了解它,可以重现随机样本,但我不知道 set.seed(1) 和 set.seed(123) 之间有什么区别?
括号中的参数是什么意思?
【问题讨论】:
标签: r
set.seed 中的 seed 参数是单个值,被解释为整数(如 help(set.seed()) 中定义的那样。set.seed 中的 seed 产生的随机值对于 seed 是唯一的(并且无论您运行的计算机如何,都将是相同的,因此可确保可重复性)。因此,set.seed(1) 和 set.seed(123) 生成的随机值将不同,但 R 在您的计算机中使用 set.seed(1) 和 R 生成的随机值在我的电脑上使用同样的seed都是一样的。
set.seed(1)
x<-rnorm(10,2,1)
> x
[1] 1.373546 2.183643 1.164371 3.595281 2.329508 1.179532 2.487429 2.738325 2.575781 1.694612
set.seed(123)
y<-rnorm(10,2,1)
> y
[1] 1.4395244 1.7698225 3.5587083 2.0705084 2.1292877 3.7150650 2.4609162 0.7349388 1.3131471 1.5543380
> identical(x,y)
[1] FALSE
【讨论】:
大多数计算机程序使用确定性算法来生成随机数(这就是为什么它们生成的数字不是真正随机的,而是伪随机的,这对于大多数用途来说已经足够好了)。 R 也不例外,您可以将它生成的随机数视为一长串“随机”数字的一部分,当被召唤时,它只是从某个点开始并为您吐出伪随机数。通过使用set.seed(),您基本上是在为程序提供一个起点,而不是让它自己选择。这就是为什么任何运行相同种子号的用户都会得到相同的结果。
您可以运行?RNGkind 以获取有关该主题的更多信息。
【讨论】:
random 的 R 包可以生成真正的随机变量。虽然还没有测试过(正如我所说,伪随机通常足够好):dirk.eddelbuettel.com/code/random.html