检查`.Call` R接口中的`Inf`或`-Inf`

t30tvxxf  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(102)

在使用.Call编译代码的R包中,宏R_FINITE可以用来检查double是否接受特殊值。R_NegInfR_PosInf可用于将其设置为负或正无限值。但是我们怎样才能检验一个double值等于负无穷大值还是正无穷大值呢?
例如,当实现一个概率分布函数时,这是有用的,该函数应该在无穷大值处取0和1的值。

hs1ihplo

hs1ihplo1#

R(和C)在这里已经涵盖了,你可以简单地比较平等:

> Rcpp::cppFunction("bool isPosInf(double x) { return x == R_PosInf; }")
> sapply(c(-Inf, Inf, 0), isPosInf)
[1] FALSE  TRUE FALSE
> 
> Rcpp::cppFunction("bool isNegInf(double x) { return x == R_NegInf; }")
> sapply(c(-Inf, Inf, 0), isNegInf)
[1]  TRUE FALSE FALSE
>

请注意,虽然为了方便起见我使用了Rcpp,但这里没有任何特定于Rcpp的内容,因为比较的两个符号来自R报头。

相关问题