我有以下循环来计算 C++ 中的基本汇总统计数据(平均值、标准差、最小值和最大值),跳过缺失值(x 是双向量):
int k = 0;
long double sum = 0.0, sq_sum = 0.0;
double minv = 1.0/0.0, maxv = -1.0/0.0;
#pragma omp simd reduction(+:sum,sq_sum,k) reduction(max:maxv) reduction(min:minv)
for (int i = 0; i < n; ++i) {
double xi = x[i];
int tmp = xi == xi;
sum += tmp ? xi : 0.0;
sq_sum += tmp ? xi * xi : 0.0;
k += tmp ? 1 : 0;
minv = minv > xi ? xi : …Run Code Online (Sandbox Code Playgroud) 我正在尝试为R构建超快速模式函数,以用于汇总大型分类数据集。该函数应采用所有支持的R类型的向量输入并返回模式。我已经阅读了本帖子,本帮助页面和其他内容,但是我无法使该函数接受所有R数据类型。我的代码现在适用于数值向量,我依赖于Rcpp糖包装函数:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int Mode(NumericVector x, bool narm = false)
{
if (narm) x = x[!is_na(x)];
NumericVector ux = unique(x);
int y = ux[which_max(table(match(x, ux)))];
return y;
}
Run Code Online (Sandbox Code Playgroud)
另外,我想知道' narm '参数是否可以重命名为' na.rm '而不会给出错误,当然,如果有更快的方法来用C ++编写模式函数,我将不胜感激。