Tôi đang tạo C trong mã R.Gửi hạt giống/Đặt hạt/C trong mã R
Trong mã C của tôi, tôi đang sử dụng hàm rand() để tạo số ngẫu nhiên. R-ext.pdf nói rằng tôi phải thiết lập một hạt giống bằng cách sử dụng các lệnh;
GetRNGstate();
PutRNGstate();
Mặc dù tôi đang sử dụng các lệnh này ở trên, tôi vẫn nhận được các giá trị khác nhau cho cùng một hạt giống. Bạn có thể cho tôi bất kỳ sự giúp đỡ nào không?
Ví dụ tối thiểu là:
Trong C:
# include <R.h>
# include <Rinternals.h>
# include <Rmath.h>
# include <R_ext/Linpack.h>
SEXP example(){
SEXP output;
GetRNGstate();
PROTECT(output = allocVector(INTSXP, 1));
INTEGER(output)[0] = rand() % 50;
PutRNGstate();
UNPROTECT(1);
return(output);
}
Trong R:
dyn.load("example.so")
## The following codes return different values at ever run
set.seed(1)
.Call("example")
Cảm ơn trước.
Một lớp lót! thực sự mạnh mẽ! – agstudy
Có, mặc dù 'cppFunction()' thực hiện một số phép thuật đằng sau hậu trường để làm cho dòng đó hoạt động - nó được mở rộng. Nhưng đối với chúng tôi để sử dụng, nó là khá gần với ma thuật ;-) –
Nhưng tôi là nó tốt hơn để sử dụng sourceCpp (ít nhất là cho mục đích gỡ lỗi)? – agstudy