Innerhalb von R kann rpois
ein Vektor von Lambdas übergeben werden, der mehrere Poisson-Verteilungen beschreibt, z.Übergeben eines Vektors von Lambdas an Rcpps rpois
rpois(5, (1:5)*1000)
# [1] 1043 1974 3002 3930 4992
Above, wobei jedes Element des Ausgangsvektors wird aus einer anderen Poisson-Verteilung gezogen, mit Hilfe von 1000, 2000, 3000, 4000 und 5000, beziehungsweise.
Wenn ich einen arma::mat
(mit diesen, weil anderswo verwende ich Cubes) Lambda von Poisson-Verteilungen, was ist der beste Weg, um diese (eine Reihe zu einer Zeit) zu rpois
in Rcpp übergeben?
Hier ist ein Spielzeug Beispiel, und ein Auszug aus der folgenden Fehlermeldung:
library(inline)
library(RcppArmadillo)
code <- "
using namespace Rcpp;
using namespace arma;
arma_rng::set_seed(42); // Dirk's seed of choice
mat lam = randu(5, 5); // ignore the fact these are all 0-1
mat out(5, 5);
for (int i = 0; i < 5; i++) {
out.row(i) = rpois(5, lam.row(i));
}
return(wrap(out));
"
f <- cxxfunction(body=code, plugin="RcppArmadillo")
# cannot convert 'arma::subview_row<double>' to 'double' for argument '2'
# to 'Rcpp::NumericVector Rcpp::rpois(int, double)'
Ich muß mein Verständnis von Typ-Konvertierung in c zugeben ++ ist ziemlich schlecht. Ist das, was ich versuche, möglich (meine Vermutung ist nein, da es so aussieht, als ob rpois
ein Doppel erwartet), oder muss ich über jede Zelle der Matrix iterieren, wobei jedes Mal eine einzige Abweichung erzeugt wird?
Eine sehr nützliche Antwort, danke. Und ein guter Tipp zum Durchsuchen des Online-Handbuchs "Rcpp". Ich habe Ihren vorgeschlagenen Ansatz jetzt implementiert und es funktioniert gut :). – jbaums