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
その後は使用できません。memcpy
int64