Normalmente, trabalho com uma função Rcpp curta que recebe como entrada uma matriz em que cada linha contém K probabilidades que somam 1. A função então amostra aleatoriamente para cada linha um número inteiro entre 1 e K correspondente às probabilidades fornecidas. Esta é a função:
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadilloExtensions/sample.h>
using namespace Rcpp;
// [[Rcpp::export]]
IntegerVector sample_matrix(NumericMatrix x, IntegerVector choice_set) {
int n = x.nrow();
IntegerVector result(n);
for ( int i = 0; i < n; ++i ) {
result[i] = RcppArmadillo::sample(choice_set, 1, false, x(i, _))[0];
}
return result;
}
Atualizei recentemente o R e todos os pacotes. Agora não posso mais compilar essa função. A razão não está clara para mim. Corrida
library(Rcpp)
library(RcppArmadillo)
Rcpp::sourceCpp("sample_matrix.cpp")
lança o seguinte erro:
error: call of overloaded 'sample(Rcpp::IntegerVector&, int, bool, Rcpp::Matrix<14>::Row)' is ambiguous
Basicamente, isso me diz que minha ligação RcppArmadillo::sample()
é ambígua. Alguém pode me esclarecer por que esse é o caso?
fonte