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_realque sua questão não é.
sizeof(double)), certo? Então res[0]obtém 64 bits vale 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_tque é meramente "estacionado" dentro de um doublevetor (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.
int64e veja o que eles fazem.
NA_REALapós omemcpyporque o padrão de bits é nesse ponto o de aint64.