07 - Statistical Functions

Notes

Sum

For a vector of $n$ elements $x_1, x_2, \ldots, x_n$, the sum is calculated as:

$$ \sum_{i=1}^{n} x_i = x_1 + x_2 + \ldots + x_n $$

The following C++ function calculates the sum of a vector's elements:

[[cpp4r::register]]
double sum_cpp(doubles x) {
  int n = x.size();
  double total = 0;
  for(int i = 0; i < n; ++i) {
    total += x[i];
  }
  return total;
}

Its R equivalent is:

sum_r <- function(x) {
  total <- 0
  for (i in seq_along(x)) {
    total <- total + x[i]
  }
  total
}

Benchmark the functions as in the "Logical Functions" and "Rolling Functions" vignettes.

Arithmetic mean

The arithmetic mean of a vector of $n$ elements $x_1, x_2, \ldots, x_n$ is calculated as:

$$ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i $$

The following C++ function calculates the mean of a vector's elements:

[[cpp4r::register]]
double mean_cpp(doubles x) {
  int n = x.size();
  double y = 0;

  for(int i = 0; i < n; ++i) {
    y += x[i];
  }
  return y / n;
}

Its R equivalent would be:

mean_r <- function(x) {
  sum_r(x) / length(x)
}

Benchmark the functions as in the "Logical Functions" and "Rolling Functions" vignettes.

Variance

The variance of a vector of $n$ elements $x_1, x_2, \ldots, x_n$ is calculated as:

$$ \text{Var}(x) = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2 $$

The following C++ function calculates the variance of a vector's elements:

[[cpp4r::register]]
double var_cpp(doubles x) {
  int n = x.size();
  double y1 = 0, y2 = 0;

  for(int i = 0; i < n; ++i) {
    y1 += x[i];
    y2 += pow(x[i], 2.0);
  }
  return (y2 - pow(y1, 2.0) / n) / (n - 1);
}

Its R equivalent would be:

var_r <- function(x) {
  mean_r((x - mean_r(x))^2)
}

Benchmark the functions as in the "Logical Functions" and "Rolling Functions" vignettes.

Root Mean Square Error (RMSE)

The RMSE function measures the differences between observed values and the true value.

For a vector of $n$ elements $x_1, x_2, \ldots, x_n$ and a value $x_0$, the RMSE is calculated as:

$$ \text{RMSE}(x, x_0) = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - x_0)^2} $$

The following C++ function calculates the difference of a vector's elements to a value and returns the square root of the mean of the squared differences:

[[cpp4r::register]]
double rmse_cpp(doubles x, double x0) {
  int n = x.size();
  double y = 0;
  for (int i = 0; i < n; ++i) {
    y += pow(x[i] - x0, 2.0);
  }
  return sqrt(y / n);
}

Its R equivalent would be:

#' Return the root mean square error (R)
#' @param x numeric vector
#' @param x0 numeric value
#' @export
rmse_r <- function(x, x0) {
  sqrt(sum((x - x0)^2) / length(x))
}

Benchmark the functions as in the "Logical Functions" and "Rolling Functions" vignettes.

References



Try the cpp4r package in your browser

Any scripts or data that you put into this service are public.

cpp4r documentation built on Sept. 23, 2026, 5:06 p.m.