У меня проблемы с использованием функции replicate()
в R для генерации случайных чисел с функцией Rcpp.Рассмотрим следующую функцию в R:
trial <- function(){rnorm(1)}
replicate(10, trial())
. Она генерирует 10 случайных чисел из распределения Гаусса.Он работает совершенно нормально и выдает результат, подобный следующему:
[1] 0.7609912 -0.2949613 1.8684363 -0.3358377 -1.6043926 0.2706250 0.5528813 1.0228125 -0.2419092 -1.4761937
Однако у меня есть функция c ++ getRan()
, которая генерирует случайное число из распределения Гаусса.Я снова использовал replicate для вызова функции следующим образом:
replicate(10,getRan())
Он создает вектор с таким же номером, как этот:
> replicate(10,getRan())
[1] -1.374932 -1.374932 -1.374932 -1.374932 -1.374932 -1.374932 -1.374932 -1.374932 -1.374932 -1.374932
> replicate(10,getRan())
[1] -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785 -0.3273785
> replicate(10,getRan())
[1] -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953 -0.7591953
> replicate(10,getRan())
[1] -1.698935 -1.698935 -1.698935 -1.698935 -1.698935 -1.698935 -1.698935 -1.698935 -1.698935 -1.698935
Однако, если я вызываю функцию несколько раз, онаотлично работает:
getRan()
[1] 1.345227
> getRan()
[1] 0.3555393
> getRan()
[1] 1.587241
> getRan()
[1] 0.5313518
Так в чем здесь проблема?Повторяет ли функция replicate()
одну и ту же функцию, возвращаемую из getRan()
, вместо вызова getRan()
несколько раз?Это ошибка?
PS: я знаю, что могу использовать rnorm(n)
для генерации n нормальных случайных чисел, но я хочу использовать функцию c ++ для более сложных вычислений, основанных на генерации случайных чисел
PPS: это мой код на C ++:
double getRan(){
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);
std::normal_distribution<double> distribution (0.0,1.0);
double epi = distribution(generator);
return epi;
}