12

Rで0除算エラーを回避する簡単な方法はありますか.具体的には、

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

このコードでは、ゼロ除算によるエラーが発生します。この種の操作が引き続き有効になるように、anything/0 = 0 を定義する方法が必要です。

4

5 に答える 5

17

では、ちょっと話を戻しましょう。R はエラーを返しません。NaN を正確に返します。あなたの仕事で NaN 値を拒否するには、正当な理由が必要です。bそもそも、要素をゼロにすることを許可するのはなぜですか? あなたのコードが実際に何をしようとしているのか、そしてb[j]==0.

于 2012-10-27T16:47:47.357 に答える
10

分母のすべての項目を 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)

于 2012-10-27T02:00:52.030 に答える
9

関数「/」を変更して、ゼロの例外を設定できます。

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

例えば:

> 10/0
[1] 0

ただし、これは非常に危険です。たとえば、他の人のコードを壊す可能性があります。これを行いたい場合は、 を変更するのではなく、別のオペレーターを割り当てることをお勧めし/ます。また、数学的に意味がありません!

于 2012-10-27T08:37:57.370 に答える
6

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

またはすべてを1行で:

sum((b/a)[is.finite(b/a)])
[1] 3.5
于 2012-10-27T02:03:59.567 に答える