std::Rcpp中的RTYPE值集

std::set of RTYPE values in Rcpp

本文关键字:值集 RTYPE Rcpp std 中的      更新时间:2023-10-16

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

#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库中有几个例子,展示了如何在运行时加载SEXP类型作为编译时RTYPE的基础上进行动态运行时切换。

编译器无法知道您调用的是整数还是数字。。。然而,您想要插入的基于R的后端需要一个类型。我认为你可以用std::变体(C++17(或它的Boost版本做你想做的事。

或者只是切换原子类型。