修正方法: lm.fit(x, y, offset = offset, …) のエラー: 'y' の na/nan/inf
R を使用するときに発生する可能性のあるエラーは次のとおりです。
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...):
NA/NaN/Inf in 'y'
このエラーは、 lm()関数を使用して R の線形回帰モデルを近似しようとしたが、予測変数または応答変数にNaNまたはInf値が含まれている場合に発生します。
次の例は、このエラーを実際に修正する方法を示しています。
エラーを再現する方法
R に、さまざまなバスケットボール選手のプレー時間と得点に関する情報を含む次のデータ フレームがあるとします。
#create data frame with some NA, NaN, Inf values
df <- data. frame (minutes=c(4, NA, 28, 12, 30, 21, 14),
dots=c(12, NaN, 30, Inf, 43, 25, 17))
#view data frame
df
minutes points
1 4 12
2 NA NaN
3 28 30
4 12 Lower
5 30 43
6 21 25
7 14 17
データ フレームにはNaN値とInf値が含まれていることに注意してください。
ここで、予測変数として「分」、応答変数として「ポイント」を使用して線形回帰モデルを近似しようとしているとします。
#attempt to fit regression model
lm(points ~ minutes, data=df)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...):
NA/NaN/Inf in 'y'
NaN 値とInf値がデータ フレームに存在するため、エラーが発生します。
エラーを修正する方法
データフレーム内のNA値は問題ではないことに注意してください。実際、R は線形回帰モデルをフィッティングするときにNA値を単に無視します。
本当の問題は、 NaN 値とInf値によって引き起こされます。
これを修正する最も簡単な方法は、 NaN 値とInf値をNA値に置き換えることです。
#Replace NaN & Inf with NA
df[is. na (df) | df==" Inf "] = NA
#view updated data frame
df
minutes points
1 4 12
2 NA NA
3 28 30
4 12 NA
5 30 43
6 21 25
7 14 17
これで回帰モデルを適応させることができます。
#fit regression model
lm(points ~ minutes, data=df)
Call:
lm(formula = points ~ minutes, data = df)
Coefficients:
(Intercept) minutes
5,062 1,048
結果は回帰モデルの係数を示します。
データ フレーム内のNaN値とInf値を置き換えたため、エラーが発生していないことに注意してください。
追加リソース
次のチュートリアルでは、R の他の一般的なエラーを修正する方法について説明します。
R での修正方法: 予期しない文字列定数
R での修正方法: ExtractVars の無効なテンプレート式
R で修正する方法: 引数が数値でも論理でもない: na を返す