2016-06-19 7 views
2

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

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

Но как я могу заставить их быть одинаковыми?

+0

«Я знаю, что на C++ я должен использовать srand(), а затем rand()» - нет, если вы хотите получить качественные случайные числа ... – ArchbishopOfBanterbury

+1

Для C++ 11 вы должны посмотреть на '' вместо 'std :: rand'. http://www.cplusplus.com/reference/random/ –

ответ

-5

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

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

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

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

+2

Это не может быть ошибкой. –

+0

хорошо моя цель - попробовать и реплицировать r-проект в C++, но проект r имеет случайность в его реализации. – James

+0

OK, просто следуйте ответам Дирка: используйте свой собственный (генераторный) код генератора чисел на обоих языках. Случайность не является существенной в вашей проблеме, поэтому замените ее на Детерминизм – Roland

9

Если вы используете 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 package, который is also on CRAN.

+0

Я считаю, что это то, что я хочу. Как бы это реализовать? – James

+0

Я только что показал тебе. Остальное и еще много примеров см. В документации Rcpp. –

+0

Могу ли я пойти в другую сторону? У меня есть R-код, который установлен, но мне нужно реплицировать в C++. Итак, как бы написать lbirary (Rcpp) в C++ – James

2

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

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

например.

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

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

+0

Почему downvote? Ответ говорит о том же, что и мой, без примера. Мы писали их по существу в одно и то же время. –

 Смежные вопросы

  • Нет связанных вопросов^_^