2017-04-11 9 views
0

sample 기능을 RcppArmadillo에서 사용하여 NumericVector 개체를 임의로 샘플링했습니다. 그러나 Armadillo 유형 (vec 또는 uvec)에서 동일한 기능을 사용할 수 없음을 알았습니다. 우리는 sample.h 파일의 함수 정의를 살펴 보았습니다.이 형식으로 작업 할 수 있어야하는 템플릿 기능처럼 보이지만 많이하지 않고도 Armadillo 클래스와 작동시키는 방법을 알 수는 없습니다 Rcpp 라이브러리의 NumericVector 또는 IntegerVector 유형과의 전환 수입니다.RcppArmadillo 샘플 (아르마딜로 벡터 클래스)

예를 들어이 기능은 try.cpp이라는 파일에 기록되어 있습니다.

src/try.cpp|11 col 22 error| no matching function for call to 'sample' [cpp/gcc]  

~/Library/R/3.3/library/Rcpp/include/Rcpp/sugar/functions/sample.h|401 col 1 error| note: candidate function not viable: no known conversion from 'arma::uvec' (aka 'Col<unsigned int>') to 'int' for 1st argument [cpp/gcc] 

~/Library/R/3.3/library/Rcpp/include/Rcpp/sugar/functions/sample.h|437 col 1 error| note: candidate template ignored: could not match 'Vector' against 'Col' [cpp/gcc] 

이에 어떤 도움을 크게 :) 감사하겠습니다

+0

RcppArmadillo의 최신 버전을 신속하게 확인할 수 있습니까? 'sessionInfo()'> = 7.6 – coatless

+0

'sessionInfo()'의 결과 :'RcppArmadillo_0.7.700.0.0' –

+2

첫 번째 (방어적인) 단계로서'네임 스페이스 사용하기 ... '를 취소합니다. . –

답변

1

이 경우 사람이 앞으로이 문제에 실행 문제 : 위의 코드를 실행

// [[Rcpp::depends(RcppArmadillo)]] 
#include <RcppArmadillo.h> 
#include <RcppArmadilloExtensions/sample.h> 

using namespace arma; 
using namespace Rcpp; 

// [[Rcpp::export]] 
arma::uvec sample_index(const int &size){ 
    arma::uvec sequence = linspace<uvec>(0, size-1, size); 
    arma::uvec out = sample(sequence, size, false); 
    return out; 
} 

다음과 같은 오류를 얻을 수 사용중인 네임 스페이스에서 sample 함수의 여러 정의와 관련이있는 것으로 보입니다. 필요한 함수가 정의 된 네임 스페이스를 구체적으로 입력하면 문제가 해결됩니다. 특히 sample 함수는 Rcpp::RcppArmadillo에서 호출해야합니다.

다음 코드는 원하는대로 작동합니다.

// [[Rcpp::depends(RcppArmadillo)]] 
#include <RcppArmadillo.h> 
#include <RcppArmadilloExtensions/sample.h> 

// [[Rcpp::export]] 
arma::uvec sample_index(const int &size){ 
    arma::uvec sequence = arma::linspace<arma::uvec>(0, size-1, size); 
    arma::uvec out = Rcpp::RcppArmadillo::sample(sequence, size, false); 
    return out; 
} 
+0

파일 상단의'namespace' 선언을 제거하십시오. 당신은 그들을 사용하지 않습니다. 그리고 이것은 코드를 복사하고 붙여 넣는 다른 사람들을 무찌를 것입니다. – coatless

+0

"Rcpp"와 "RcppArmadillo"네임 스페이스 모두에 두 개의'sample()'구현이 있고 (후자는 여전히 선택 사항 임) 주어진 선택에 대해 좀 더 명시해야합니다. " –