R에서 예측 변수를 factor로 하고 데이터 작업 하다보면 언젠가는 만날 수 있는 에러라고 생각한다.
이거때문에 is.na() 같은 데이터 체크 함수로 별짓을 다 해봤지만 별 이상없는 데이터를 바라보면 왜 그럴까 했는데, 역시 factor 변수를 쓰면서 나올 수 있는 문제였다.
결과적으로 이 문제는 데이터 편집하다가 값이 없는 factor level이 포함되어 있을때 나올 수 있다. 그러니까 levels(foo)의 결과가 “1” “2” “3” 인데, 실제 데이터 레코드에는 “1”, “2” 값만 있고. “3”을 가지는 레코드가 없을때 난다.
이를 해결하는 방법은
콘솔에서 ?”[.factor” 치면 나오는 help 문서를 참고하면 된다.
간단히 foo[,drop=T] 로 하면 값이 없는 factor level은 삭제된 factor 변수가 리턴되니 그걸 쓰면 된다.
이거 말고 caret 패키지를 같이 쓸데 cross validation 셋을 나눌때도 동일한 에러가 발생할 수 있다. 10개로 쪼개지 못할 정도로 적은 클래스 레코드들 때문에 발생할 수 있으니, 당황하지 말고 기억해 둬야 한다.
"Can’t have empty classes in y." by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.