В R функция после (распределение яда) можно использовать как dpois(x,theta) с обоими x и theta быть векторами. Однако в Rcpp его так использовать нельзя. Может ли кто-нибудь предложить какую-либо функцию для замены цикла в следующем dtpoi0 функция.
#include <algorithm>
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;
// [[Rcpp::depends("RcppArmadillo")]]
// [[Rcpp::export]]
imat misy(const ivec& x) {
const int s1 = std::min(x(0), x(1));
const int s2 = std::min(x(0), x(2));
const int s3 = std::min(x(1), x(2));
imat missy(3, 1, fill::zeros);
for (int i = 0; i <= s1; ++i) {
for (int j = 0; j <= s2 and i + j <= x(0); ++j) {
for (int k = 0; k <= s3 and i + k <= x(1) and j + k <= x(2); ++k) {
missy = join_rows(missy, ivec{i, j, k});
}
}
}
missy.shed_col(0);
return (missy);
}
// [[Rcpp::export]]
double dtpoi0(const ivec& x, const vec& theta) {
imat missy = misy(x);
double fvalue = 0.0;
missy.each_col([&](ivec& v) {
ivec u=join_cols(x - v(uvec{0, 0, 1}) - v(uvec{1, 2, 2}), v);
double prod = 1;
for (int i = 0; i < (int (u.n_elem)); ++i) {
prod *= R::dpois(u(i), theta(i), 0);
}
fvalue += prod;
});
return fvalue;
}
