Rcpp函数根据输入返回Matrix或DataFrame

时间:2014-06-24 15:10:34

标签: r rcpp

我在Rcpp中有两个函数:

//[[Rcpp::export]]
DataFrame func1(DataFrame& x) {
  ...
}

//[[Rcpp::export]]
NumericVector func2(NumericMatrix& x) {
  ...
}

如何编写常用功能

SEXP func(SEXP& x) {
  ...
}

如果输入为func1,则使用DataFrame;如果输入为func2,则使用Matrix

我试图在网上查找示例,例如此处给出的示例:http://gallery.rcpp.org/articles/fast-factor-generation/但我无法让它工作。

1 个答案:

答案 0 :(得分:3)

你需要is<>,即这样的东西:

if( is<DataFrame>(x) ){
   return func1(x) ; 
} else {
   return func2(x) ;
}

但要使其正常工作,您需要在提供const DataFrame&之前使用对const的引用,即DataFrame或创建func1。像这样:

if( is<DataFrame>(x) ){
    DataFrame df(x) ;
    return func1(df) ; 
} else {
    NumericMatrix m(x) ;
    return func2(m) ;
}