2016-07-19 12 views
5

Tôi đang sử dụng createFolds() trong R (phiên bản: 3.3.0) để tạo phân vùng tàu/thử nghiệm. Để làm cho kết quả có thể tái sản xuất, tôi đã sử dụng set.seed() với giá trị hạt giống là 10. Như mong đợi, kết quả (nếp gấp được tạo ra) có thể tái sản xuất được.Kết quả R: set.seed() không phù hợp nếu gói caret được tải

Nhưng một khi tôi đã tải gói hàng chỉ sau khi đặt hạt giống. Và sau đó sử dụng hàm createFolds, tôi thấy rằng các nếp gấp đã tạo khác nhau (mặc dù vẫn có thể tái sản xuất).

Cụ thể, những nếp gấp tạo ra khác nhau trong hai trường hợp sau:

Trường hợp 1:

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

Trường hợp 2:

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

nơi y là một vector.

Tại sao điều này có thể xảy ra?

Trả lời

3

Thủ phạm là ggplot2, được đính kèm khi bạn tải dấu mũ. Nó định nghĩa một hàm .onAttach: https://github.com/hadley/ggplot2/blob/master/R/zzz.r

Chức năng này được gọi khi gói được gắn, xem help("ns-hooks"). Và trong đó runif được gọi là từ đó thúc đẩy trạng thái của RNG.

+0

A [câu hỏi tương tự] (https://github.com/topepo/caret/issues/452) đã xuất hiện vào một ngày khác; một số gói sử dụng số ngẫu nhiên khi khởi động – topepo

+0

@topepo có cách nào xung quanh vấn đề này không? Tôi có cùng một vấn đề, nhưng ngay cả khi tôi thiết lập hạt giống sau khi tải gói caret. Đây có phải là dự kiến ​​không ?. Tôi đã hy vọng sử dụng dấu mũ cho createFolds, nhưng tôi cần một cách để làm cho nó có thể tái sản xuất được. EDIT: Tôi chỉ nhận ra rằng tôi đã không đặt hạt giống giữa các cuộc gọi khác nhau của 'createFolds()', đó là vấn đề. – Reilstein

Các vấn đề liên quan