1. non-numeric argument to binary operator(이항연산자에 수치가 아닌 인수입니다) 에러 원인
해당 오류는 숫자형 자료에 다른 형태의 자료를 연산할 때 나오는 오류입니다.
R에서는 따옴표를 통해서 문자형을 표현합니다.
즉, "1" 과 1은 다른 유형의 값들입니다.
2. 에러 해결방법
"1" + 1 # "1"은 문자형 자료 Error in "1" * 3 : 이항연산자에 수치가 아닌 인수입니다
함수를 이용해서 숫자로 바꾸는 것은 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.WidthError 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