繁体   English   中英

std :: Rcpp中的RTYPE值集

[英]std::set of RTYPE values in Rcpp

说我想实现一个计算唯一值的函数,例如

#include <Rcpp.h>

using Rcpp::Vector;
using Rcpp::traits::is_na;
using Rcpp::IntegerVector;

template <int RTYPE>
IntegerVector nunique( const Vector<RTYPE>& x ) {
    std::set<typename Rcpp::traits::storage_type<RTYPE>::type> values;
    for ( int i = 0; i < x.length(); ++i ) {
      if ( !is_na<RTYPE>(x[i]) )
        values.insert(x[i]);
    }
    return IntegerVector::create(values.size());
}

但是,它将无法编译,并引发如下错误:

error: call of overloaded 'insert(Rcpp::Vector<19>::const_Proxy)' is ambiguous
         values.insert(x[i]);

要么

error: no match for 'operator<' (operand types are 'const Rcomplex' and 'const Rcomplex')
       { return __x < __y; }

有什么方法可以创建RTYPE对象的std::set吗? 或者,如何使用此类对象的某种哈希值来计算唯一值?

我们在Rcpp Gallery上有一些示例,展示了如何基于运行时加载SEXP类型(作为编译时RTYPE)进入运行时进行动态运行时切换。

编译器无法知道您是使用整数还是数字进行调用...但是要插入的基于R的后端需要一种类型。 我认为您可以使用std :: variant (C ++ 17)或其Boost版本来完成您想做的事情。

或者只是切换原子类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM