64ビットのベクトルでNA値をRcppからRに渡すにはどうすればよいですか?
私の最初のアプローチは:
// [[Rcpp::export]]
Rcpp::NumericVector foo() {
Rcpp::NumericVector res(2);
int64_t val = 1234567890123456789;
std::memcpy(&(res[0]), &(val), sizeof(double));
res[1] = NA_REAL;
res.attr("class") = "integer64";
return res;
}
しかし、それは
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
取得する必要があります
#> foo()
integer64
[1] 1234567890123456789 <NA>
NA_realあなたの質問が何であるかされていません。
sizeof(double))のみをコピーしますか?だから、res[0]64ビットから取得 valして、設定res[1] = ...の用途に次の64ビットは。結果に同意しますが、最初のコメントにはあまり従わないでください。
int64_t単に内部「駐車」であるdoubleベクトル(別名NumericVector)。魔法の論理のコピーはありません。ジェムズはすべてのハードワークを手作業で行っています。マッピングNAを含みます。
int64見て、それらが何をするかを見てください。
NA_REALその後は使用できません。memcpyint64