Zwykle pracuję z krótką funkcją Rcpp, która przyjmuje jako dane wejściowe macierz, w której każdy wiersz zawiera prawdopodobieństwo K, które sumują się do 1. Funkcja następnie losowo sprawdza dla każdego wiersza liczbę całkowitą od 1 do K odpowiadającą podanym prawdopodobieństwom. To jest funkcja:
// [[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;
}
Niedawno zaktualizowałem R i wszystkie pakiety. Teraz nie mogę już skompilować tej funkcji. Powód nie jest dla mnie jasny. Bieganie
library(Rcpp)
library(RcppArmadillo)
Rcpp::sourceCpp("sample_matrix.cpp")
zgłasza następujący błąd:
error: call of overloaded 'sample(Rcpp::IntegerVector&, int, bool, Rcpp::Matrix<14>::Row)' is ambiguous
To w zasadzie mówi mi, że moje wezwanie do RcppArmadillo::sample()
jest niejednoznaczne. Czy ktoś może mnie oświecić, dlaczego tak jest?
źródło