2014-02-06 4 views
0

Я новичок в C++ и пакет Rccp, но я нашел некоторый код в галерее rcpp, который позволяет генерировать из многомерного нормального дистрибутива. КодОшибка при попытке скомпилировать с помощью sourceCpp в R

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

using namespace Rcpp; 

// [[Rcpp::export]] 
arma::mat mvrnormArma(int n, arma::vec mu, arma::mat sigma) { 
    int ncols = sigma.n_cols; 
    arma::mat Y = arma::randn(n, ncols); 
    return arma::repmat(mu, 1, n).t() + Y * arma::chol(sigma); 
} 

Сохранение его в файле multivgaussian.cpp, когда я пытаюсь скомпилировать его в R с

sourceCpp("multivgaussian.cpp") 

Я получаю сообщение об ошибке

Error in dyn.load("/tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so") : 
    unable to load shared object '/tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so': 
    /tmp/RtmpGoFAwi/sourcecpp_6a751b6a3bee/sourceCpp_67198.so: undefined symbol: _ZN4Rcpp8internal14r_vector_startILi13EEEPNS_6traits12storage_typeIXT_EE4typeEP7SEXPREC 

Я также попытался чтобы увидеть, что произойдет (в терминале), если я попытаюсь скомпилировать его.

R CMD SHLIB multivgaussian.cpp 
g++ -I/maths/R/lib64/R/include -DNDEBUG -I/usr/local/include -fpic -g -O2 -c multivgaussian.cpp -o multivgaussian.o 
multivgaussian.cpp:1:27: error: RcppArmadillo.h: No such file or directory 
multivgaussian.cpp:4: error: ‘Rcpp’ is not a namespace-name 
multivgaussian.cpp:4: error: expected namespace-name before ‘;’ token 
multivgaussian.cpp:7: error: ‘arma’ has not been declared 
multivgaussian.cpp:7: error: expected constructor, destructor, or type conversion before ‘mvrnormArma’ 
make: *** [multivgaussian.o] Error 1 

Это, наверное, что-то простое, но я ничего не нашел в Интернете. Большое спасибо, Charis

ответ

0

Rcpp выпустил релиз на этой неделе, который требует, чтобы его пакеты пользователей были перестроены. Убедитесь, что ваш RcppArmadillo также перестроен.

В вашем примере R CMD SHLIB вы не говорите R о зависимости RcppArmadillo, чтобы он не работал. В первом примере строка

// [[Rcpp::depends(RcppArmadillo)]] 

заботится о том, что, но вы все еще есть проблемы компоновщика - возможно, из-за несовпадения версий.

+0

Спасибо за быстрый ответ (@suspectus, @DirkEddelbuettel) Я только что узнал о новой версии Rcpp, и мне нужно обновить версию R, чтобы установить новый пакет. Думаю, это будет так. Я должен подождать до завтра, когда университет обновит мою версию R. Спасибо еще раз. –

+0

Вам не обязательно. Если у вас есть последовательные версии, тогда он должен работать. Просто не обновляйте один из RcppArmadillo и Rcpp, но не другой. –

+0

Просто сделал это. Сейчас все работает нормально. Спасибо. –

Смежные вопросы