해결 방법: 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

데이터 프레임에는 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에서 수정하는 방법: 인수가 숫자도 아니고 논리도 아닙니다. return na

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다