[R-pkg-devel] For reproducibility issue
On Fri, 17 Jan 2020 13:55:39 +0000
???? ??? ???? ??????? <wkmtierie at qu.edu.sa> wrote:
So, does anyone have an idea of how to solve this issue.
"Writing R Extensions", 1.6. Writing portable packages:
Compiled code should not call the system random number generators such as rand, drand48 and random, but rather use the interfaces to R?s RNGs described in Random numbers. In particular, if more than one package initializes the system RNG (e.g. via srand), they will interfere with each other.
Nor should the C++11 random number library be used, nor any other third-party random number generators such as those in GSL.
It somewhat less convenient to call the R random number generator from Fortran than it would be from C or C++, but still possible. There is a F77-style example of such use [1], but since you are already using iso_c_binding, you should be able to declare the C API [2] right in the Fortran source: subroutine GetRNGState() bind(c) end subroutine subroutine PutRNGstate() bind(c) end subroutine As a bonus, you get to use the R distribution functions [3], without the need to implement them yourself from uniformly distributed samples: function rnorm(mu, sigma) bind(c) result(ret) use intrinsic, iso_c_binding, only: c_double real(c_double), value :: mu, sigma real(c_double) ret end function function rgamma(shape, scale) bind(c) result(ret) use intrinsic, iso_c_binding, only: c_double real(c_double), value :: shape, scale real(c_double) ret end function (The prototypes above are unchecked; I haven't written any Fortran 2003 in more than a year.)