有没有一种简单的方法可以避免 R 中的 0 除法错误。具体来说,
a <- c(1,0,2,0)
b <- c(3,2,1,0)
sum(b/a)
由于被零除,此代码给出错误。我想要一种定义任何东西/0 = 0 的方法,以便这种操作仍然有效。
有没有一种简单的方法可以避免 R 中的 0 除法错误。具体来说,
a <- c(1,0,2,0)
b <- c(3,2,1,0)
sum(b/a)
由于被零除,此代码给出错误。我想要一种定义任何东西/0 = 0 的方法,以便这种操作仍然有效。
好吧,让我们后退一分钟。R 不返回错误。它非常正确地返回 NaN。你最好有一个很好的理由在你的工作中拒绝 NaN 值。为什么你首先允许任何b
元素为零?您需要考虑您的代码的真正意图是什么,以及愉快地丢弃所有b[j]==0
.
您将分母中的所有项目设置为 0 到NA
然后排除NA
什么?在你的sum
?
a[a==0] <- NA
sum(b/a, na.rm=TRUE)
#-----
[1] 3.5
或不修改a
:sum(b/ifelse(a==0,NA,a), na.rm = TRUE)
您可以将函数“/”更改为零例外:
"/" <- function(x,y) ifelse(y==0,0,base:::"/"(x,y))
例如:
> 10/0
[1] 0
这是非常危险的,例如它可能会破坏其他人的代码。如果您想这样做,最好分配一个不同的运算符而不是更改/
. 在数学上也没有任何意义!
如果要屏蔽所有NaN
结果Inf
,请尝试以下操作:
a <- c(1,0,2,0)
b <- c(3,2,1,0)
result <- b/a
sum(result[is.finite(result)])
[1] 3.5
或全部在一行中:
sum((b/a)[is.finite(b/a)])
[1] 3.5
我只是在类似的情况下工作。这适用于 ifelse():
sum(ifelse(a==0,0,b/a))