2016-07-14 8 views
1

Wann wird RNGScope scope benötigt, wenn Rcpp verwendet wird? In der Regel haben Sie need it bei Verwendung von C RNG-Funktionen. An einigen Stellen können Sie lesen, dass es not needed ist, wenn Sie Rcpp verwenden, Beispiele in Rcpp documentation verwenden Sie es, einige Beispiele von Dirk Eddelbuettel use it, während andere this one oder this nicht mögen. Also am Ende bin ich verwirrt ...Ist (und wann) RNGScope-Bereich in Rcpp-Code erforderlich?

Wann genau wird es benötigt und wann nicht? Macht es einen Unterschied, ob ich Rcpp::runif(), R::runif() oder R::unif_rand() verwende? Ich bin hauptsächlich daran interessiert, Rcpp innerhalb des R-Pakets zu verwenden, anstatt den Standalone-Code aufzurufen.

Antwort

4

Kurz:

  • , wenn Sie die RNGs des C-API von R nennen, müssen Sie speichern und später wieder eingestellt Zustand
  • RNGScope dies für Sie automatisieren, wie es so verflixt ist nützlich (und in der Regel preiswert)
  • , wann immer Sie verwenden RCPP Attribute, es fügt RNGScope (wie Sie sehen können, wenn Sie auf verbose=TRUE drehen

Also im Allgemeinen müssen Sie nichts manuell - außer Sie gehen wirklich alte Schule und schreiben Sie alle Code direkt, den Klebstoff von Rcpp zur Verfügung gestellt.

Und wenn Sie RCPP verwenden, spielt es keine Rolle, ob Sie Skalar-Interfaces aus dem R:: Namespace oder den vektorisiert Rcpp Sugar onces über Rcpp:: verwenden. RNGScope wird für Sie da sein.

+0

Danke! Vielleicht sollten die Beispiele in Rcpp Vignetten behoben werden, um es nicht zu erwähnen ..? Ich habe * eine solche Antwort erwartet, aber die vielen Beispiele, die etwas anderes zeigen, haben mich verwirrt. – Tim

+0

Pull-Anfrage? ;-) –

+0

Klar, lass mich mal Zeit dafür finden :) – Tim