Rで0除算エラーを回避する簡単な方法はありますか.具体的には、
a <- c(1,0,2,0)
b <- c(3,2,1,0)
sum(b/a)
このコードでは、ゼロ除算によるエラーが発生します。この種の操作が引き続き有効になるように、anything/0 = 0 を定義する方法が必要です。
Rで0除算エラーを回避する簡単な方法はありますか.具体的には、
a <- c(1,0,2,0)
b <- c(3,2,1,0)
sum(b/a)
このコードでは、ゼロ除算によるエラーが発生します。この種の操作が引き続き有効になるように、anything/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
またはすべてを1行で:
sum((b/a)[is.finite(b/a)])
[1] 3.5