Случайные числа в R и переполнение стека

Скажем, я хочу создать вектор из 10 случайных чисел. Как бы я мог сделать это в R и C ++, чтобы я получил один и тот же вектор?

Я знаю, в C ++ я должен использовать srand (), а затем rand ()
в то время как в R я могу использовать set.seed () и затем runif.

Но как мне заставить их быть такими же?

2

Решение

Если вы используете C API для R — или, что еще лучше, интерфейс Rcpp для C ++, построенный поверх него — тогда вы получите легкий доступ к так же потоки из тех же генераторов.

R> library(Rcpp)    # load Rcpp
R> cppFunction("NumericVector myrnorm(int n) { return rnorm(n); }")
R> # now we have a C++ function access n N(0,1) numbers
R> set.seed(41); myrnorm(3)
[1] -0.794368  0.197258  1.001704
R>
R> # same thing in R
R> set.seed(41)
R> rnorm(3)
[1] -0.794368  0.197258  1.001704
R>

Вы заметите, что они оба генерируют одинаковые числа с одинаковым начальным числом. Тот это особенность.

Теперь вы также можете перенести свой собственный генератор RNG в R из кода C ++. Я делаю это, например, в RcppZiggurat пакет который также на CRAN.

10

Другие решения

Мало что, я не уверен, пытаетесь ли вы создать отдельное приложение или просто интерфейс C ++ с R.

Если это позже, просто используйте Rcppфантики в список r поддерживаемые дистрибутивы.

например

R::runif(0.0,1.0) или использовать сахар Rcpp::runif(10, 0.0, 1.0)

Если это предыдущий, проверьте sitmo и как вы можете реализовать свой собственный runif.

2

Вся идея генератора случайных чисел заключается в том, что результат не является предсказуемым или воспроизводимым. Если вы ожидаете одинакового вывода от двух отдельных систем, например, реализован на R и C ++, опирается на недокументированные слабые стороны реализаций.

Непонятно, почему вы попробуете это.

Вы хотите «а» вектор. Предполагая, что это означает «один», почему бы не сохранить некоторые числа в TXT-файле и одновременно прочитать приложение R и C ++ из этого файла?

Я бы не стал полагаться на какие-либо предсказуемые результаты работы генератора случайных чисел. Нет никакой гарантии, что две среды программирования C ++, вызывающие RAND или RND, или любую другую библиотечную функцию, получат одинаковые числа, не говоря уже о приложениях R и C ++. Они могут называть разные версии RAND …

-5
По вопросам рекламы [email protected]