R中的零分割

时间:2012-10-27 01:55:52

标签: r

是否有一种简单的方法可以避免R中的0除法错误。具体来说,

a <- c(1,0,2,0)
b <- c(3,2,1,0)
sum(b/a)

此代码由于除以零而产生错误。 我想要一种方法来定义任何/ 0 = 0,这样这种操作仍然有效。

5 个答案:

答案 0 :(得分:14)

嗯,让我们回来一分钟。 R不会返回错误。它非常正确地返回NaN。你最好有一个很好的理由拒绝你工作中的NaN值。为什么首先允许任何b元素为零?你需要考虑一下你的代码真正打算做什么,以及(统计上说,如何)快速抛弃所有b[j]==0的情况。

答案 1 :(得分:7)

您将分母中的所有项目设置为0到NA,然后排除NA?在sum

a[a==0] <- NA
sum(b/a, na.rm=TRUE)
#-----
[1] 3.5

或者不修改asum(b/ifelse(a==0,NA,a), na.rm = TRUE)

答案 2 :(得分:6)

如果您想屏蔽所有NaNInf结果,请尝试以下操作:

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

答案 3 :(得分:6)

您可以将函数“/”更改为零例外:

"/" <- function(x,y) ifelse(y==0,0,base:::"/"(x,y))

例如:

> 10/0
[1] 0

这是非常危险的,例如它可能会破坏其他人的代码。如果你想这样做,分配一个不同的运算符而不是改变/可能是个好主意。它在数学上也没有意义!

答案 4 :(得分:1)

我只是在类似情况下工作。 这与ifelse()很好地配合:

sum(ifelse(a==0,0,b/a))