2013-01-17 38 views
7

Sự hiểu biết của tôi là sử dụng set.seed đảm bảo khả năng tái sản xuất nhưng đây không phải là trường hợp với mã R sau đây trong R 2.15.2. Am i thiếu cái gì ở đây?set.seed with R 2.15.2

set.seed(12345) 
rnorm(5) 
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875 
rnorm(5) 
[1] -1.8179560 0.6300986 -0.2761841 -0.2841597 -0.9193220 

Trả lời

19

set.seed() reinitializes random number generator.

set.seed(12345) 
rnorm(5) 
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875 

set.seed(12345) 
rnorm(5) 
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875 

set.seed(12345) 
rnorm(5) 
[1] 0.5855288 0.7094660 -0.1093033 -0.4534972 0.6058875 
12

Bất kỳ cuộc gọi có sử dụng máy phát điện số ngẫu nhiên sẽ thay đổi hạt giống hiện tại, ngay cả khi bạn đã tự đặt nó với set.seed.

set.seed(1) 
x <- .Random.seed # get the current seed 
runif(10) # uses random number generator, so changes current seed 
y <- .Random.seed 
identical(x, y) # FALSE 

Như @StephanKolassa chứng minh, bạn phải đặt lại hạt giống trước mỗi lần sử dụng trình tạo số ngẫu nhiên để đảm bảo nó sử dụng cùng một lần mỗi lần.