Câu hỏi của tôi là theo dõi http://rcpp-devel.r-forge.r-project.narkive.com/qJMEsvOK/setting-the-r-random-seed-from-rcpp.Rcpp đặt trạng thái RNG thành trạng thái trước đây
Tôi muốn có thể đặt trạng thái RNG thành trạng thái cũ từ trong C++. Ví dụ, tôi muốn đoạn mã sau để tạo ra một ma trận trong đó mỗi cột chứa cùng một sự thực hiện các biến ngẫu nhiên Gamma.
cppFunction('NumericMatrix rgamma_reset_seed(int n, double shape, double rate){
RNGScope rngscope;
Environment g = Environment::global_env();
Environment::Binding RandomSeed = g[".Random.seed"];
IntegerVector someVariable = RandomSeed;
NumericMatrix results(n, 2);
results(_,0) = rgamma(n, shape, 1/rate);
RandomSeed = someVariable;
results(_,1) = rgamma(n, shape, 1/rate);
return results;
}')
m <- rgamma_reset_seed(1000, 1.2, 0.8)
par(mfrow = c(2, 1))
plot(m[,1])
plot(m[,2])
Nhưng có vẻ như nó không hoạt động. Trong R, tôi có thể đạt được kết quả theo các dòng như
.Random.seed <- x # reset the state to x
x <- .Random.seed # store the current state
Tôi có thiếu thứ gì đó hiển nhiên không? Bất kì sự trợ giúp nào đều được đánh giá cao!
Cảm ơn sự giúp đỡ của bạn. Vấn đề là tôi muốn làm điều đó nhiều lần từ bên trong mã Rcpp, vì vậy tôi sẽ không biết giá trị nào cần sử dụng trong cuộc gọi 'set.seed' mà không có" đọc nó "bằng cách nào đó từ' .Random.seed'. Dường như nó sẽ dễ dàng hơn để mã thuật toán của tôi trong R với ít khi gọi hàm Rcpp, để tôi có thể sao chép và khôi phục biến '.Random.seed' từ bên trong R. Tôi có đúng không? –
Tôi thực sự không biết. Có lẽ bạn muốn xem xét sử dụng một động cơ RNG khác nhau? Rất nhiều sự đánh đổi ở đây. –