Wie kann ich einen NA-Wert von Rcpp an R in einem 64-Bit-Vektor übergeben?
Mein erster Ansatz wäre:
// [[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;
}
Aber es gibt nach
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
Ich benötige
#> foo()
integer64
[1] 1234567890123456789 <NA>
NA_real
das, worum es in Ihrer Frage nicht geht.
sizeof(double)
), oder? So res[0]
bekommt 64 Bits aus val
und dann Einstellen res[1] = ...
Anwendungen die nächsten 64 Bits. Ich bin mit dem Ergebnis einverstanden, aber folge deinem ersten Kommentar nicht wirklich.
int64_t
das lediglich wird als „geparkt“ in einem double
Vektor (aka NumericVector
). Es gibt keine magische Logikkopie. Jems erledigt die ganze harte Arbeit von Hand. Einschließlich Mapping-NAs.
int64
und sehen Sie, was sie tun.
NA_REAL
nach dem nicht verwenden,memcpy
da das Bitmuster an diesem Punkt das von a istint64
.