해결 방법: 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'
이 오류는 R에서 선형 회귀 모델을 맞추기 위해 lm() 함수를 사용하려고 시도했지만 예측 변수 또는 응답 변수에 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에서 수정하는 방법: 인수가 숫자도 아니고 논리도 아닙니다. return na