데이터 분석/R 오류처리

[R] non-numeric argument to binary operator(이항연산자에 수치가 아닌 인수입니다)

love R 2021. 5. 1. 16:41
반응형

1. non-numeric argument to binary operator(이항연산자에 수치가 아닌 인수입니다) 에러 원인

 

해당 오류는 숫자형 자료에 다른 형태의 자료를 연산할 때 나오는 오류입니다.

R에서는 따옴표를 통해서 문자형을 표현합니다. 

즉, "1" 과 1은 다른 유형의 값들입니다.

 

2. 에러 해결방법

"1" + 1 # "1"은 문자형 자료
Error in "1" * 3 : 이항연산자에 수치가 아닌 인수입니다

 

1+1 # 모두 숫자형
2

 

함수를 이용해서 숫자로 바꾸는 것은 as.numeric 함수를 이용해 문자형을 숫자형으로 바꿉니다.

#문자형 -> 숫자형 변환 후 연산 
as.numeric("1") + 1
2

 

 

데이터프레임에서 겉으로 보기에는 숫자형인지 문자형인지 확인할 수는 없습니다.

이 때는 str 함수를 이용해서 변수별 유형을 확인합니다.

iris 데이터를 이용해서 실습을 해봅시다.

str(iris)

'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1


# 위를 보면 Sepal.Length부터 Petal.Width 는 숫자형(num)인 것을 알 수 있습니다.
# 이 때 Sepal.Length 를 문자형으로 바꾼 후 연산을 하겠습니다.

iris$Sepal.Length <- as.character(iris$Sepal.Length)  
iris$Sepal.Length + iris$Sepal.Width
Error in iris$Sepal.Length + iris$Sepal.Width : 이항연산자에 수치가 아닌 인수입니다


# 다시 Sepal.Length를 숫자형으로 바꾸고 연산합니다.
iris$Sepal.Length <- as.numeric(iris$Sepal.Length)
iris$Sepal.Length + iris$Sepal.Width


 [1]  8.6  7.9  7.9  7.7  8.6  9.3  8.0  8.4  7.3  8.0  9.1  8.2  7.8  7.3  9.8
 [16] 10.1  9.3  8.6  9.5  8.9  8.8  8.8  8.2  8.4  8.2  8.0  8.4  8.7  8.6  7.9
 [31]  7.9  8.8  9.3  9.7  8.0  8.2  9.0  8.5  7.4  8.5  8.5  6.8  7.6  8.5  8.9
 [46]  7.8  8.9  7.8  9.0  8.3 10.2  9.6 10.0  7.8  9.3  8.5  9.6  7.3  9.5  7.9
 [61]  7.0  8.9  8.2  9.0  8.5  9.8  8.6  8.5  8.4  8.1  9.1  8.9  8.8  8.9  9.3
 [76]  9.6  9.6  9.7  8.9  8.3  7.9  7.9  8.5  8.7  8.4  9.4  9.8  8.6  8.6  8.0
 [91]  8.1  9.1  8.4  7.3  8.3  8.7  8.6  9.1  7.6  8.5  9.6  8.5 10.1  9.2  9.5
[106] 10.6  7.4 10.2  9.2 10.8  9.7  9.1  9.8  8.2  8.6  9.6  9.5 11.5 10.3  8.2
[121] 10.1  8.4 10.5  9.0 10.0 10.4  9.0  9.1  9.2 10.2 10.2 11.7  9.2  9.1  8.7
[136] 10.7  9.7  9.5  9.0 10.0  9.8 10.0  8.5 10.0 10.0  9.7  8.8  9.5  9.6  8.9

 

반응형