Я использую Rcpp и RcppArmadillo, и у меня "странная" проблема. Допустим, у меня есть функция f1 (). Я включаю эту функцию в свой пакет и запускаю команду «R CMD INSTALL». После этого я запускаю тест и понимаю, что f1 медленнее примерно на 100 микросекунд внутри пакета, чем снаружи. Так что, если функция хочет завершить 100 мс, в пакете требуется около 200 + мс.
Код:
functions.cpp
vec f1(vec x){
vec F( x.size() );
for( int i = 0; i < x.size(); ++i ){
// do something
}
return F;
}
exportfunctions.cpp
vec f1(vec x);
RcppExport SEXP MyPackage_f1(SEXP xSEXP) {
BEGIN_RCPP
RObject __result;
RNGScope __rngScope;
traits::input_parameter< vec >::type x(xSEXP);
__result = wrap(f1(x));
return __result;
END_RCPP
}
exportfunctions.R
f1<- function(x) {
.Call( ' MyPackage_f1 ' , PACKAGE = ' MyPackage ', x )
}
Пример написания моего кода. Я считаю, что проблема в том, что function.R вызывает function.cpp, который вызывает последнюю функцию. Но почему это происходит внутри пакета, а не в sourceCpp. Я не понимаю разницы.