2016-07-19 223 views
5

Sto usando createFolds() in R (versione: 3.3.0) per creare partizioni treno/prova. Per rendere riproducibili i risultati, ho utilizzato set.seed() con un valore di inizializzazione di 10. Come previsto, i risultati (pieghe generate) erano riproducibili.R: set.seed() i risultati non corrispondono se il pacchetto caret è caricato

Ma una volta ho caricato il pacchetto di accento dopo aver impostato il seme. E poi ho usato la funzione createFolds, ho scoperto che le pieghe create erano diverse (anche se ancora riproducibili).

In particolare, le pieghe create differiscono nei seguenti due casi:

Caso 1:

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

Caso 2:

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

dove y è un vettore.

Perché questo potrebbe accadere?

risposta

3

Il colpevole è ggplot2, che viene allegato quando si carica il cursore. Definisce una funzione .onAttach: https://github.com/hadley/ggplot2/blob/master/R/zzz.r

Questa funzione viene chiamata quando il pacchetto è collegato, vedere help("ns-hooks"). E al suo interno si chiama runif, facendo avanzare lo stato del RNG.

+0

Una [domanda simile] (https://github.com/topepo/caret/issues/452) è comparsa l'altro giorno; alcuni pacchetti usano numeri casuali all'avvio – topepo

+0

@topepo c'è qualche modo per aggirare questo problema? Ho lo stesso problema, ma anche se imposto il seed dopo aver caricato il pacchetto di caret. È previsto? Speravo di usare il caret per createFolds, ma ho bisogno di un modo per renderlo riproducibile. EDIT: Ho appena realizzato che non stavo impostando il seed tra le diverse chiamate di 'createFolds()', questo era il problema. – Reilstein