如何修复: 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 中的线性回归模型,但预测变量或响应变量包含NaNInf值时,会出现此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们在 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

请注意,数据帧包含NaNInf值。

现在假设我们尝试使用“分钟”作为预测变量和“点”作为响应变量来拟合线性回归模型:

 #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'

我们收到错误,因为数据帧中存在NaNInf值。

如何修复错误

需要注意的是,数据框中的NA值不是问题。事实上,R在拟合线性回归模型时只是忽略了NA值。

真正的问题是由NaNInf值引起的。

解决此问题的最简单方法是将NaNInf值替换为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

结果显示回归模型的系数

请注意,自从我们替换了数据框中的NaNInf值以来,我们没有收到任何错误。

其他资源

以下教程解释了如何修复 R 中的其他常见错误:

如何修复 R:意外的字符串常量
如何修复 R:ExtractVars 中的模板公式无效
如何在 R 中修复:参数既不是数字也不是逻辑:返回 na

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注