代表:
// [[Rcpp::export]]
int dbl2int(double x) { return x; }
/*** R
dbl2int(NA_real_)
*/
Rcpp::sourceCpp("test-dbl2int.cpp")
在 Mac 上,它输出 0,而在 Windows 和 Linux 上输出 NA_INTEGER(参见 https://github.com/privefl/testbigstatsr/actions/runs/10737751205/job/29779881355#step:6:165)。 注意:这个问题最近才在 Mac 上出现(多年来它一直给出 NA_INTEGER..)。
知道发生了什么,以及如何进行此转换,以便它适用于所有平台并且仍然高效吗?
这很可能是有风险的代码。您依赖于一个非常非标准的 NA 转换:只有 R 知道整数的 NA,因此您押注于找到适当的 R 转换。 我不确定我们可以依赖这一点。
我想到两件事。 首先,也许看看是否可以将其提炼为 R 函数的纯 C API,然后向 r-devel 报告。 (此外,如果该方法有效,而该方法无效,请提交一个 Rcpp bug 来表明这一点。)
第二,使用更安全的转换器。 类似的东西
Rcpp::cppFunction("int dbl2int(double x) {
if (ISNAN(x)) return NA_INTEGER; else return static_cast<int>(x); }")