R 파일 읽기나 경로 변경 시 Error: 'C:\U' used without hex digits in character string starting 'C:\U' 해결
해결만을 위한다면 어떻게 수정하는지만 봐도 되는데, 원리를 알고 다시는 같은 에러를 겪고 싶지 않다면 모두 읽는 것을 추천한다.
에러
진단
가령 바탕화면에 위와 같이 exampe.csv 파일을 읽고싶다고 할 때, 다음과 같은 에러가 뜨는 경우가 있다.
Error: '\U' used without hex digits in character string starting ""C:\U"
아무리 봐도 모든 경로에 문제가 없기 때문에 이런 저런 시도를 하다가 ‘바탕 화면’이라는 한글이 문제인 것 같아 경로를 바꿔보기도 했을 것이다. 그러나 C:
나 D:
드라이브 바로 밑으로 가지 않는 이상 이와 비슷한 문제는 계속해서 일어난다.
원인
문제의 간접적인 원인은 바탕화면에 파일을 두면서 Users(사용자) 폴더로 들어간 것이다. 아마 탐색기에서 주소창을 바로 긁어서 붙여넣었을텐데, 그때 \U
가 16진법으로 읽히면서 에러가 났다. 꼭 사용자 폴더가 아니라도 \
뒤에 뭔가 붙게 되면 이스케이프 문자라는 걸로 인식하기 때문에 문제가 생긴다. 이 포스트 제목에서 하필 \U
를 저격한 이유는 정말 많은 R 초보자들이 별 생각 없이 바탕화면에서 작업을 시작해서 이런 메세지를 보게될 확률이 높기 때문이다.
이스케이프 문자는 엔터키라든가 현재 시각, 백스페이스와 같이 우리가 키보드로는 입력하더라도 문자열 자체에 남기기가 곤란한 것들을 표현하기 위해 있는 것이다. 따라서 보통 글로는 잘 쓸 일이 없는 백슬래쉬, 통화기호인 \
뒤에 특정한 알파벳을 입력함으로써 실수로 사용하는 것을 방지한다.(컴퓨터는 \
와 백슬래시를 똑같이 인식한다. 잘 이해가 안되면 그냥 외워도 된다.)
아이러니하게도 백슬래쉬가 그런 용도로 많이 쓰이다보니 실제 백슬래시로 쓰는 것인지 이스케이프문자로 쓰고 싶은지가 헷갈릴 수 있게 되었고, 현재 백슬래시를 쓰고 싶다면 \\
와 같이 \
앞에 \
를 써서 이스케이프 문자가 아니라 백슬래시 자체를 원한다고 입력해주어야한다.
해결법
따라서, 만약 내가 읽고 싶은 파일의 경로가
"C:\Users\rmsms\OneDrive\바탕 화면\example.csv"
라면, 이스케이프 문자를 피하기 위해 \를 \로 다음과 같이 바꿔줘야한다.
"C:\\Users\\rmsms\\OneDrive\\바탕 화면\\example.csv"
그러면 위와 같이 잘 읽어지는 것을 확인할 수 있다.
왜 \
이 아니라 /
인가
한편 외국 사이트에서 검색하다보면
"C:\Users\rmsms\OneDrive\바탕 화면\example.csv"
의 \
를 /
로 바꿔주라는 도움말을 볼 때도 있다.
"C:/Users/rmsms/OneDrive/바탕 화면/example.csv"
처음에는 백슬래시가 슬래시로 바뀌는 부조리함에 몸서리 치게 되겠지만, 사실 이는 대부분의 프로그래밍 언어가 그러하듯 리눅스 환경에 맞게 슬래시로도 경로를 구분하기 때문에 일어나는 일이다. R이 이상한 게 아니라 대부분 슬래시로도 경로를 입력할 수 있기 때문에 너무 억울하게 생각하지 말자.
실제로 슬래시로 바꿔서 읽어보면 문제 없이 데이터를 읽어들인 것을 확인할 수 있다.