[英]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.