[R-pkg-devel] For reproducibility issue
Ivan Krylov
kry|ov@r00t @end|ng |rom gm@||@com
Fri Jan 17 15:39:14 CET 2020
On Fri, 17 Jan 2020 13:55:39 +0000
وليد خلف معوض المطيرى <wkmtierie using 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.)
--
Best regards,
Ivan
[1]:
https://cran.r-project.org/doc/manuals/R-exts.html#index-Random-numbers-in-Fortran
[2]: https://cran.r-project.org/doc/manuals/R-exts.html#Random-numbers
[3]:
https://cran.r-project.org/doc/manuals/R-exts.html#Distribution-functions
More information about the R-package-devel
mailing list