#rcpp
Вопрос:
Я учусь использовать Rcpp в R. Не могли бы вы объяснить мне разницу между R::runif() и Rcpp::runif().
Я имею в виду 3 вопроса:
- Производят ли эти 2 функции один и тот же поток случайных чисел, учитывая, что мы задаем одно и то же начальное значение перед запуском каждой из них ?
- Какая функция предпочтительнее при использовании Rcpp ? Я имею в виду, мне кажется, что 2 функции производят одно и то же, но Rcpp::runif() будет работать быстрее.
- Как вызвать Rcpp::runif() в файле .R ? Верно ли, что Rcpp::runif() может быть вызван только из файла .cpp, а не в R? (Я имею в виду, мне кажется, что функция Rcpp::runif() широко используется для написания других функций C , затем я импортирую эту функцию с помощью sourcecpp() для использования в R)
Большое вам спасибо за вашу помощь!
Ответ №1:
Я подозреваю, что этот вопрос является дубликатом, поэтому я могу закрыть его, но вот:
- Да, это так. Весь смысл интерфейсов RNG заключается в том, чтобы гарантировать именно это
- Полностью зависит от вас. Иногда вы хотите обернуть или использовать пример C API, и у вас есть
R::runif()
для этого. Иногда вам нужны эффективные векторные операции, для которых у вас естьRcpp::runif()
. - Вы пишете функцию C , обращающуюся к API C . Обратите внимание, что не все эти функции будут выполняться быстрее, чем вызов того, что предлагает R, когда то, что предлагает R, уже векторизовано. Ваша упаковка
Rcpp::runif()
не будет сильно отличаться по производительности от вызоваstats::runif()
. Вы используете средство доступа C в коде C , написав что-то, что вы не можете легко получить от R.
Правка: В этом посте галереи Rcpp есть некоторые предпосылки и примеры.
Комментарии:
1. Привет, большое вам спасибо за вашу помощь! я хотел бы кое-что уточнить, если вы не возражаете: — @1: по поводу 2) в вашем ответе, я думаю, все должно быть наоборот, верно ? (т. Е. «иногда вы хотите обернуть или использовать пример API C, и у вас есть $RCPP::RUNIF ()$). — @2: Не могли бы вы любезно рассказать мне, что такое «статистика::» в вашем ответе на 3) пожалуйста ? Я поискал в Интернете, но я не уверен, что это такое. Большое вам спасибо за вашу помощь, а также за разработку Rcpp, вы просто потрясающи.
2.
stats::
обозначает пространство именstats
пакета, поставляемого с R, точно так же, какbase
,utils
,tools
,stats4
(!!),grid
,lattice
, … Я обычноstats::runif()
делал это явным, если вы печатаете простоrunif<Return>
для того, чтобы посмотреть на телоrunif()
функции, вы видите, что она исходитstats
. Удачи в чтении Rcpp и обучении шаг за шагом, я надеюсь, что вы продолжите находить это путешествие стоящим.