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

Ric*_*rta 5 r division divide-by-zero

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

我经常发现自己在做类似的事情

 results[is.infinite(results)] <- NaN
Run Code Online (Sandbox Code Playgroud)

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


例:

### 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
Run Code Online (Sandbox Code Playgroud)

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

quotient[is.infinite(quotient)] <- NaN
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果最后一步可以避免,同时仍然得到相同的预期结果.

Dir*_*tel 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> 
Run Code Online (Sandbox Code Playgroud)

  • 上面的@DirkEddelbuettel关于x / 0是错误的。x / 0不是无限的-不在代数中,不在微积分中,也不在编程中。考虑`x = 1`。“ x / y”的“ y-&gt; 0”的左右限制不一致。左边的限制是“ -inf”,右边的限制是“ inf”。这些限制不一样。 (3认同)
  • 哎呀 感谢您的更正。is.finite()和朋友仍然做正确的事。 (2认同)

Val*_*tin 0

这些属性会有帮助吗?0*InfNaN也是,所以尝试这样的事情也会得到你想要的结果NaN+InfNaN

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