包内的函数比包

时间:2016-08-08 02:08:13

标签: rcpp r-package

我使用Rcpp和RcppArmadillo,我有一个"奇怪的"问题。让我们说我有函数f1()。我在我的包中包含了这个函数并运行命令" R CMD INSTALL"。完成之后,我运行基准测试,我意识到f1在包内的速度比外部慢100微秒。因此,如果函数需要100ms才能完成,那么在包中需要大约200 + ms。

代码:

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 )
}

我的代码编写方式的一个示例。 我相信问题是一个函数.R调用一个函数调用最终函数的函数。但是为什么会在包内发生,而不是在sourceCpp中发生。我无法理解其中的差异。

1 个答案:

答案 0 :(得分:4)

简言之:

  • 100毫秒不是问题。你是来自R,这是一个解释的环境

  • 调用函数涉及几个步骤。在包中查找函数涉及更多功能。

  • 请参阅.Call()的文档,了解如何最大限度地减少查询。

  • 请参阅NAMESPACE的文档,以便在其中设置标识符。

后两点应该有助于缩小在环境中调用ad-hoc函数(更便宜)与从正确创建的基础架构调用函数之间的差距< / em>又名包。