Como posso passar um valor de NA de Rcpp para R em um vetor de 64 bits?
Minha primeira abordagem seria:
// [[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;
}
Mas produz
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
Eu preciso pegar
#> foo()
integer64
[1] 1234567890123456789 <NA>
NA_real
que sua questão não é.
sizeof(double)
), certo? Então res[0]
obtém 64 bits val
e a configuração res[1] = ...
usa os próximos 64 bits. Concordo com o resultado, mas não siga o seu primeiro comentário.
int64_t
que é meramente "estacionado" dentro de um double
vetor (aka NumericVector
). Não há cópia lógica mágica. Jems está fazendo todo o trabalho duro à mão. Incluindo o mapeamento de NAs.
int64
e veja o que eles fazem.
NA_REAL
após omemcpy
porque o padrão de bits é nesse ponto o de aint64
.