R: set.seed () результаты не совпадают, если загружен пакет каретки

Я использую createFolds() в R (версия: 3.3.0) для создания разделов поездов / тестов. Чтобы сделать результаты воспроизводимыми, я использовал set.seed() с начальным значением 10. Как и ожидалось, результаты (сгенерированные складки) были воспроизводимы.

Но однажды я загрузил пакет каретки сразу после установки семени. А затем, используя функцию createFolds, я обнаружил, что созданные складки были разными (хотя все еще воспроизводимы).

В частности, создаваемые складки различаются в следующих двух случаях:

Дело 1:

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

Случай 2:

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

где y - вектор.

Почему это могло происходить?


person Inderdeep Singh    schedule 19.07.2016    source источник


Ответы (1)


Виновник - ggplot2, который прикрепляется при загрузке каретки. Он определяет функцию .onAttach: https://github.com/hadley/ggplot2/blob/master/R/zzz.r

Эта функция вызывается при прикреплении пакета, см. help("ns-hooks"). И внутри него вызывается runif, тем самым продвигая состояние ГСЧ.

person Roland    schedule 20.07.2016
comment
На днях возник аналогичный вопрос; некоторые пакеты используют случайные числа при запуске - person topepo; 25.07.2016
comment
@topepo есть ли способ обойти эту проблему? У меня такая же проблема, но даже если я установил семя после загрузки пакета каретки. Ожидается ли это ?. Я надеялся использовать курсор для createFolds, но мне нужен способ сделать его воспроизводимым. РЕДАКТИРОВАТЬ: Я только что понял, что не устанавливаю семя между различными вызовами createFolds(), это была проблема. - person Reilstein; 29.03.2017