R 在 C++ 中将 NA_REAL 转换为整数现在在 Mac 上给出 0(而不是 NA_INTEGER)

问题描述 投票:0回答:1

代表:

// [[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..)。

知道发生了什么,以及如何进行此转换,以便它适用于所有平台并且仍然高效吗?

r rcpp
1个回答
0
投票

这很可能是有风险的代码。您依赖于一个非常非标准的 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); }")
© www.soinside.com 2019 - 2024. All rights reserved.