¿Cómo puedo pasar un valor de NA de Rcpp a R en un vector de 64 bits?
Mi primer enfoque sería:
// [[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;
}
Pero rinde
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
Necesito conseguir
#> foo()
integer64
[1] 1234567890123456789 <NA>
NA_real
que se trata su pregunta.
sizeof(double)
) ¿verdad? Entonces res[0]
obtiene 64 bits val
y luego la configuración res[1] = ...
usa los siguientes 64 bits. Estoy de acuerdo con el resultado, pero realmente no sigo tu primer comentario.
int64_t
que simplemente está "estacionado" dentro de un double
vector (también conocido como NumericVector
). No hay una copia de lógica mágica. Jems está haciendo todo el trabajo duro a mano. Incluyendo mapeo de NAs.
int64
y mira lo que hacen.
NA_REAL
después dememcpy
porque el patrón de bits es en ese punto el de aint64
.