Sia Rcpp che RcppArmadillo hanno i test previsti per NA
, NaN
(un'estensione R) e Inf
.
Ecco un breve esempio RcppArmadillo:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::mat foo(int n, double threshold=NA_REAL) {
arma::mat M = arma::zeros<arma::mat>(n,n);
if (arma::is_finite(threshold)) M = M + threshold;
return M;
}
/*** R
foo(2)
foo(2, 3.1415)
***/
Inizializziamo una matrice di zeri e di test per l'argomento. Se è finito (ovvero non NA
o Inf
o NaN
), aggiungeremo quel valore. Se lo volessi, potresti anche testare individualmente le possibilità.
Questo produce il risultato desiderato: senza un secondo argomento si applica il valore predefinito di NA
e otteniamo una matrice di zeri.
R> Rcpp::sourceCpp("/tmp/giorgio.cpp")
R> foo(2)
[,1] [,2]
[1,] 0 0
[2,] 0 0
R> foo(2, 3.1415)
[,1] [,2]
[1,] 3.1415 3.1415
[2,] 3.1415 3.1415
R>
fonte
2014-10-07 19:01:12
Quando dici "mancante", intendi "NA" o intendi che non stai trasmettendo alcun valore ad esso? – stanekam