R: set.seed() 如果加载插入符号包,结果不匹配

R: set.seed() results don't match if caret package loaded

我在 R(版本:3.3.0)中使用 createFolds() 创建 train/test 分区。为了使结果可重现,我使用了种子值为 10 的 set.seed()。正如预期的那样,结果(生成的折叠)是可重现的。

但是一旦我在设置种子后加载了插入符号包。然后使用createFolds函数,发现创建的folds不一样(虽然还是可以重现)

具体而言,创建的折叠在以下两种情况下有所不同:

案例 1:

library(caret)
set.seed(10)
folds=createFolds(y,k=5,returnTrain=TRUE)

案例二:

set.seed(10)
library(caret)
folds=createFolds(y,k=5,returnTrain=TRUE)

其中 y 是一个向量。

为什么会这样?

罪魁祸首是 ggplot2,它是在您加载插入符号时附加的。它定义了一个 .onAttach 函数:https://github.com/hadley/ggplot2/blob/master/R/zzz.r

附加包时调用此函数,参见help("ns-hooks")。并在其中调用 runif 从而推进 RNG 的状态。