Cả Rcpp và RcppArmadillo đều có các biến vị ngữ để kiểm tra NA
, NaN
(phần mở rộng R) và Inf
.
Đây là một RcppArmadillo ngắn ví dụ:
#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)
***/
Chúng tôi khởi tạo một ma trận các zeros, và thử nghiệm cho các cuộc tranh cãi. Nếu nó là hữu hạn (tức là không phải là NA
hoặc Inf
hoặc NaN
), thì chúng tôi thêm giá trị đó. Nếu bạn muốn, bạn có thể kiểm tra các khả năng riêng lẻ.
Điều này tạo ra kết quả mong muốn: không có đối số thứ hai, giá trị mặc định là NA
sẽ áp dụng và chúng tôi nhận được ma trận số không.
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>
Nguồn
2014-10-07 19:01:12
Khi bạn nói mất tích, bạn có nghĩa là "NA" hay bạn có nghĩa là bạn không chuyển bất kỳ giá trị nào cho nó? – stanekam