Translate

2018년 4월 30일 월요일

R에서 데이터 오류가 나는 경우



 R에서 데이터를 다루다보면 다양한 포맷의 데이터를 읽어들이거나 처리하는 과정에서 에러가 나는 경우를 쉽게 볼 수 있습니다. 표준 csv 파일의 경우 그런 경우가 적지만, SAS/STATA 같은 다른 통계 패키지나 혹은 엑셀로 데이터를 다루는 경우 에러가 있는 파일을 읽어들이면 R에서도 여러 가지 오류가 발생합니다. 


 대표적인 경우는 엑셀에서 값에 에러가 있었는데 모르고 R에서 불러들이는 경우입니다. #DIV/0! (0으로 나누어진 잘못된 값이 있다는 뜻)이 대표적인 경우입니다. 이 경우 엑셀에서 이런 이상한 값이 있는지 확인해고 제거해주면 문제가 해결됩니다. 경우에 따라서는 한글 데이터가 문제를 일으키는 경우도 있습니다. 예를 들어 아래와 같은 경우입니다. 


> data1=read.csv("H:/KoGES/nutri.csv")
> data2=read.csv("H:/KoGES/HTN12.csv")
> result<-merge all.x="TRUE)</span" data1="" data2="" key="RID">
Error: cannot allocate vector of size 467.5 Mb


 두 개의 데이터를 읽어서 합치는 과정에서 cannot allocate vector of size.... 라는 메세지가 뜨면서 작업이 진행되지 않습니다. 이 경우 작업 관리자를 띄워보면 메모리를 급속히 잡아먹으면서 메모리가 모자란 상황이 되었음을 알 수 있습니다. 




 참고로 R은 이상한 데이터가 있으면 이를 수정하는 과정에서 메모리를 급속히 소진하는 것으로 보입니다. DIV 에러 발생시에도 비슷하게 메모리를 모두 잡아먹는 특징이 나타납니다. 아무튼 이런 에러가 있으면 데이터 크기는 10MB 수준인데 메모리는 10GB를 먹을 수 도 있습니다. 이럴 때 메모리가 부족한지 알고 메모리를 증설해도 문제는 해결되지 않습니다. 방법은 에러를 제거하는 것입니다. 에러를 확인하기 위해 summary를 통해 데이터의 전체 모습을 확인합니다. 




 여기서 보면 RID라고 표기되어야 하는 값이 이상하게 글자가 깨진 것을 확인할 수 있습니다. 이 에러는 한글 입력과 관련된 오류로 보이는데, 엑셀에서 수정할 수 있습니다. 




 CSV UTF-8 (쉼표로 분리)로 저장한 파일을 CSV(쉼표로 분리)로 변경하면 이 문제가 해결되는 것을 볼 수 있습니다. 


 이 오류에 대해서 구글링을 해봤는데 사실 쉽게 해답을 찾을 수 없었습니다. (개인적으로 파일 문제가 아닌가 싶어 파일 교체 후 해결되는 것 확인) 그래서 이렇게 블로그에 올려 봅니다. 비슷한 문제로 곤란을 겪는 분께 도움이 되었으면 합니다. 


 그리고 R에서 이상하게 메모리를 집어먹는 문제는 거의 메모리 문제가 아닐 가능성이 높습니다. 그보다는 파일 문제가 더 가능성 있다는 것을 염두에 두시면 메모리 가격도 비싼데 불필요한 메모리 업그레이드를 피할 수 있을 것입니다. 



댓글 없음:

댓글 쓰기