Rファイルの読み取りやパス変更時に「Error: 'C:\U' used without hex digits in character string starting 'C:\U'」を解決する
もし解決策だけが欲しいなら、どう修正するかを見るだけでもいいけど、同じエラーにまた遭遇したくなければ、全てを読むのをおすすめするよ。
エラー
診断
例えば、上のようにデスクトップでexample.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が変なわけじゃなくて、実際にほとんどの言語でパスをスラッシュで入力できるから、あまり悔しく思わないでほしい。
実際にスラッシュに変えて読んでみると、問題なくデータを読み込んでいることが確認できる。