Làm cách nào tôi có thể chuyển một giá trị NA từ Rcpp sang R trong một vectơ 64 bit?
Cách tiếp cận đầu tiên của tôi sẽ là:
// [[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;
}
Nhưng nó mang lại
#> foo()
integer64
[1] 1234567890123456789 9218868437227407266
tôi cần lấy
#> foo()
integer64
[1] 1234567890123456789 <NA>
NA_real
đó không phải là những gì câu hỏi của bạn là về.
sizeof(double)
) phải không? Vì vậy, res[0]
nhận 64 bit từ val
và sau đó cài đặt res[1] = ...
sử dụng 64 bit tiếp theo. Tôi đồng ý với kết quả này, nhưng không thực sự làm theo bình luận đầu tiên của bạn.
int64_t
chỉ đơn thuần là "đậu" bên trong một double
vectơ (aka NumericVector
). Không có bản sao logic ma thuật. Jems đang làm tất cả các công việc khó khăn bằng tay. Bao gồm các NA ánh xạ.
int64
và xem những gì họ làm.
NA_REAL
saumemcpy
bởi vì mẫu bit tại thời điểm đó là một trong số aint64
.