我有 60 行代码。在整个代码中,有几个对随机数生成器的调用,包括rnorm()
. 放在代码的最开始就足够了set.seed(x)
,还是每次代码中发生随机数生成时我都需要 set.seed ?
问问题
5707 次
1 回答
9
这实际上取决于您如何预见未来代码的变化。
如果您希望在代码中较早的位置包含需要生成随机数的命令,并且您希望在插入该代码之前复制先前获得的结果,则应set.seed()
在代码中的适当位置使用。
例子:
set.seed(1)
A <- rnorm(10)
B <- rnorm(10)
C <- rnorm(10) ## I always want "C" to be the results I get here
set.seed(1)
AA <- rnorm(10); BB <- rnorm(10); CC <- rnorm(10)
identical(A, AA)
# [1] TRUE
identical(B, BB)
# [1] TRUE
identical(C, CC)
# [1] TRUE
set.seed(1)
A <- rnorm(10); B <- rnorm(10); C <- rnorm(10)
set.seed(1)
AA <- rnorm(10); BB <- rnorm(10); BA <- rnorm(10); CC <- rnorm(10)
identical(A, AA)
# [1] TRUE
identical(B, BB)
# [1] TRUE
identical(C, CC)
# [1] FALSE
在上面,如果我希望“C”无论前面出现什么都始终相同,我应该在那之前设置种子。
C
请注意,由于在创建or之前我没有重置种子,并且在第二个示例中,CC
有一个新函数需要在 和 之间生成随机数,因此和的值现在不同。如果您希望它们相同,则必须在创建and之前插入另一个,如下所示:BB
CC
C
CC
set.seed
C
CC
set.seed(1)
A <- rnorm(10)
B <- rnorm(10)
set.seed(2)
C <- rnorm(10) ## I always want "C" to be the results I get here
set.seed(1)
AA <- rnorm(10); BB <- rnorm(10); BA <- rnorm(10);
set.seed(2)
CC <- rnorm(10)
identical(A, AA)
# [1] TRUE
identical(B, BB)
# [1] TRUE
identical(C, CC)
# [1] TRUE
于 2013-09-09T10:42:05.673 回答