Скажем, я хочу создать вектор из 10 случайных чисел. Как бы я мог сделать это в R и C ++, чтобы я получил один и тот же вектор?
Я знаю, в C ++ я должен использовать srand (), а затем rand ()
в то время как в R я могу использовать set.seed () и затем runif.
Но как мне заставить их быть такими же?
Если вы используете 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.
Мало что, я не уверен, пытаетесь ли вы создать отдельное приложение или просто интерфейс C ++ с R.
Если это позже, просто используйте Rcpp
фантики в список r
поддерживаемые дистрибутивы.
например
R::runif(0.0,1.0)
или использовать сахар Rcpp::runif(10, 0.0, 1.0)
Если это предыдущий, проверьте sitmo и как вы можете реализовать свой собственный runif.
Вся идея генератора случайных чисел заключается в том, что результат не является предсказуемым или воспроизводимым. Если вы ожидаете одинакового вывода от двух отдельных систем, например, реализован на R и C ++, опирается на недокументированные слабые стороны реализаций.
Непонятно, почему вы попробуете это.
Вы хотите «а» вектор. Предполагая, что это означает «один», почему бы не сохранить некоторые числа в TXT-файле и одновременно прочитать приложение R и C ++ из этого файла?
Я бы не стал полагаться на какие-либо предсказуемые результаты работы генератора случайных чисел. Нет никакой гарантии, что две среды программирования C ++, вызывающие RAND или RND, или любую другую библиотечную функцию, получат одинаковые числа, не говоря уже о приложениях R и C ++. Они могут называть разные версии RAND …