2016-03-04 2 views
1

я столкнулся с этой странной проблемой: когда я пытаюсь использовать мой sourcecpp() на мой файл CPP, он будет генерировать эту ошибку: фатальной ошибке: «» RcppArmadillo.h файл не найден.sourcecpp не может найти «RcppArmadillo.h», но cxxfunction может

Мой файл каст что-то вроде этого

#include "RcppArmadillo.h" 
// [[ Rcpp :: depends (RcppArmadillo)]] 
using namespace arma; 
using namespace Rcpp; 
... 

Но я уверен, что у меня есть мой RcppArmadillo.h и странные вещи, если я скомпилировать функцию, используя cxxfunction(..., plugin="RcppArmadillo"), все будет работать нормально.

Еще более странно, что после того, как я запустил cxxfunction(), функция sourcecpp() внезапно будет работать со всеми моими файлами cpp, используя RcppArmadillo.h.

Что происходит?

ответ

4

Это работает с регулярным выражением и добавлением всех этих пробелов перерыв регулярное выражение для плагина через Rcpp::depends().

Есть десятки размещенных примеров; начните с того, что работает. Возьмем, к примеру this simple example from the Rcpp Gallery и поместите следующий код в, скажем, /tmp/armaeigen.cpp:

#include <RcppArmadillo.h> 

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

// [[Rcpp::export]] 
arma::vec getEigenValues(arma::mat M) { 
    return arma::eig_sym(M); 
} 

/*** R 
set.seed(42) 
X <- matrix(rnorm(4*4), 4, 4) 
Z <- X %*% t(X) 
getEigenValues(Z) 
*/ 

sourceCpp("/tmp/armaeigen.cpp") не только работает (т.е. компилирует, ссылки и нагрузки), а также запускает встроенный пример для вас:

R> sourceCpp("/tmp/armaeigen.cpp") 

R> set.seed(42) 

R> X <- matrix(rnorm(4*4), 4, 4) 

R> Z <- X %*% t(X) 

R> getEigenValues(Z) 
      [,1] 
[1,] 0.331887 
[2,] 1.685588 
[3,] 2.409920 
[4,] 14.210011 
R> 

Виньетка Rcpp Attributes имеет все детали.

+0

Это решает мою проблему! Должно быть, небрежно скопировал это неправильное выражение откуда-то. Thx и обязательно прочитает виньетку. – Bayesric

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