Wewnątrz R, rpois
może być przekazany wektor lambdas opisujący wiele rozkładów Poissona, np.Przekazywanie wektora lambd do rpois Rcppa
rpois(5, (1:5)*1000)
# [1] 1043 1974 3002 3930 4992
powyżej, każdy element wektora wyjściowego pochodzi z innego rozkład Poissona, środki 1000, 2000, 3000, 4000 i 5000, odpowiednio.
Jeśli mam(używając tych, ponieważ gdzie indziej używam kostek) zawierających lambdy z rozkładów Poissona, jaki jest najlepszy sposób przekazania tych znaków (jeden wiersz na raz) do rpois
w Rcpp?
Oto przykład zabawki, a wyciąg z następującego komunikatu o błędzie:
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)'
Muszę przyznać, moje rozumienie typu konwersji w C++ jest dość słaba. Czy to, co próbuję zrobić możliwe (domyślam się, że nie, ponieważ wydaje się, że rpois
spodziewa się podwójnego), czy też muszę przetestować każdą komórkę macierzy, generując pojedyncze odchylenie za każdym razem?
Bardzo przydatna odpowiedź, dziękuję. I świetna wskazówka na temat przeszukiwania podręcznika 'Rcpp'. Zaimplementowałem Twoje sugerowane podejście teraz i działa dobrze :). – jbaums