sourceCpp和Rcpp.package.skeleton之间的区别

时间:2014-02-14 08:34:56

标签: windows r rcpp

#include <Rcpp.h>
using namespace Rcpp;


// [[Rcpp::export]]
NumericVector condSumRcpp(NumericVector x, NumericVector y, LogicalVector z) {

  int n = x.length();
  int sumLength = sum(z);

  NumericVector res(sumLength);
  int j=0;

  for(int i = 0; i < n; i++) {
    if (!z[i]) continue;
    res[j] = x[i] + y[i];
    j+=1;
  }

  return wrap(res);
 }

当我使用sourceCpp时,这工作正常。但是当我使用

Rcpp.package.skeleton("testRcpp",
  example_code = FALSE,
  cpp_files="utils.cpp",
  module=FALSE
)

并使用R CMD INSTALL --build testRcpp构建包

Error in .Call("testRcpp_condSumRcpp", PACKAGE = "testRcpp", x, y, z) : 
  "testRcpp_condSumRcpp" not available for .Call() for package "testRcpp"

如果我使用

执行相同的过程
// [[Rcpp::export]]
NumericVector colMaxRcpp(NumericMatrix X) {

    int ncol = X.ncol();
    NumericVector res(ncol);

    for (int col = 0; col < ncol; col++){
        res[col]=Rcpp::max(X(_, col)); 
    }

    return wrap(res);
}

然后它有效!

1 个答案:

答案 0 :(得分:0)

您不能随意混合属性和Rcpp.package.skeleton()

我通常首先创建一个空包(通过Rcpp.package.skeleton()或RStudio中的相应功能),然后添加我的功能。致电compileAttributes(),您应该做得很好。