NA values for now. Adjustments for handling NA values are covered in a separate vignette.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.
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.
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.
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.
Diez D, Cetinkaya-Rundel M, Barr C, OpenIntro (2015). OpenIntro Statistics. Leanpub. https://leanpub.com/os.
Hansen BE (2022). Econometrics. Princeton University Press, Princeton, New Jersey. ISBN 978-0-691-23589-9.
Vaughan D, Hester J, Francois R (2024). “Get started with cpp11.” https://cpp11.r-lib.org/articles/cpp11.html#intro.