强制除以零默认为NaN而不是Inf

时间:2013-09-18 19:46:33

标签: r division divide-by-zero

我想知道是否可能有一个设置我忽略了强制R在除以零时返回NaN而不是±Inf

我经常发现自己在做像

这样的事情
 results[is.infinite(results)] <- NaN

我希望完全跳过过滤/搜索过程。


实施例

### Example:

num <- c(1:5, NA)
denom <- -2:3

quotient <- num / denom
[1] -0.5 -2.0  Inf  4.0  2.5   NA

# desired results
[1] -0.5 -2.0  NaN  4.0  2.5   NA

实现预期结果的简单方法是:

quotient[is.infinite(quotient)] <- NaN

我想知道的是,如果仍能获得相同的预期结果,可以避免最后一步。

2 个答案:

答案 0 :(得分:5)

我会切换我的谓词,而不是试图重新定义数学:

 R> is.finite(c(Inf, NA, NaN))    
 [1] FALSE FALSE FALSE 
 R> is.infinite(c(Inf, NA, NaN))   
 [1]  TRUE FALSE FALSE 
 R> is.na(c(Inf, NA, NaN)) 
 [1] FALSE  TRUE  TRUE
 R> 

答案 1 :(得分:0)

这些属性会有用吗? 0*Inf NaNNaN+Inf也是NaN,所以尝试这样的事情也会得到您想要的结果:

quotient <- (num / denom)*0 + (num / denom)
## [1] -0.5 -2.0  NaN  4.0  2.5   NA