如何修复: 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