Windowsを使用したRでのファイルパスの問題(「文字列の16進数」エラー)


89

WindowsでRを実行し、デスクトップにcsvファイルがあります。次のようにロードします。

x<-read.csv("C:\Users\surfcat\Desktop\2006_dissimilarity.csv",header=TRUE)

しかし、Rは次のエラーメッセージを表示します

エラー:「C:\ U」で始まる文字列に16進数なしで使用された「\ U」

それで、このファイルをロードする正しい方法は何ですか。Vistaを使用しています

回答:


134

すべて置き換える\\\

この場合、次の文字をエスケープしようとしているUので、挿入するために\エスケープ挿入するようにあなたがする必要が\あります\\


1
これは本当です。\を\\に置き換えるだけで、スクリプトは正常に実行されます。ありがとうスミット!
Rajeev Kumar Barnwal 2016

これはより良い答えです。C:/ Users / ...のようなrのWindowsからのパスは機能し、\\よりも混乱が少なくなります。パスを\にする必要がある唯一の状況は、shell( "cd C:\\ Users \\ &&
dosomething

27

smitecはすでに正しく回答しているため、この回答を正しいものとしてマークしないでください。WindowsパスをRで機能する形式(Sacha Epskampによって記述されたメソッド)に変換する.Firstライブラリに保持している便利な関数を含めています。パスをクリップボードにコピーして(ctrl + c)、関数をとして実行するだけpathPrep()です。議論の必要はありません。パスはコンソールに正しく印刷され、スクリプトに簡単に貼り付けることができるようにクリップボードに書き込まれます。これがお役に立てば幸いです。

pathPrep <- function(path = "clipboard") {
    y <- if (path == "clipboard") {
        readClipboard()
    } else {
        cat("Please enter the path:\n\n")
        readline()
    }
    x <- chartr("\\", "/", y)
    writeClipboard(x)
    return(x)
}

1
これを書こうとしていたので、最初にチェックしてよかったです。トンありがとう。私はこれが世の中で最も人気のあるパッケージの1つに漏れていないことに本当に驚いています(私がそれを見逃していない限り)。スクリプトでこれを使用するので、完了したらわずかなバリエーションを投稿します。
ロブ

1
現在、レポート開発パッケージに含まれており、最終的にはCRANにプッシュされます。レポート開発パッケージのWP(Windowsパス)を参照してください。
タイラーリンカー2013

11

解決

これを試して: x <- read.csv("C:/Users/surfcat/Desktop/2006_dissimilarity.csv", header=TRUE)

説明

Rは、"\"特別な意味があるため、通常のWindowsパスを正しく理解できません。これは、次の文字に特別な意味を与えるためのエスケープ文字として使用され\nます(改行、\tタブ、\rキャリッジリターン、...、こちらをご覧ください)。

Rはシーケンスを知らないので、\U文句を言います。ただ、交換する"\"との"/"または追加を使用 "\"逃れるために "\"その特別な意味から、すべてがスムーズに動作します。

代替案

Windowsでは、RのWindows固有のパスを使用してワークフローを改善するための最善の方法は、カスタムホットキーを許可するAutoHotkeyなどを使用することだと思います。

  • 例えば、ホットキーを定義しますCntr- Shift-V
  • クリップボード内のバックスラッシュをスラッシュに置き換える手順を割り当てます...
  • 今まであなたが使用することができますRへのパスをコピー&ペーストしたいときCntr- Shift-V代わりにCntr-V
  • Et-voila

AutoHotkeyコードスニペット (ホームページへのリンク)

^+v::
StringReplace, clipboard, clipboard, \, /, All 
SendInput, %clipboard% 

5

私の解決策は、RStudioスニペットを次のように定義することです。

snippet pp
    "`r gsub("\\\\", "\\\\\\\\\\\\\\\\", readClipboard())`"

このスニペットは、円記号を円記号\に変換します\\。次のバージョンは、バックスラッシュをフォワードスラッシュに変換する場合に機能します/

snippet pp
    "`r gsub("\\\\", "/", readClipboard())`"

お好みのスニペットが定義されると、次のように入力して、クリップボードからのパスを貼り付けp- p- TAB- ENTER(PP、その後、タブキーであること、次に入力)とパスが魔法のようにR優しい区切り文字で挿入されます。


これを見るまで、RStudioにスニペットが存在することを知りませんでした。これはすごいです。
デビッド



1

テキストマイニング(音声、ニュースレターなど)のデータを含むtxtファイルの場合、これに対処する最善の方法は、「\」を「/」に置き換えることです。

例:

file<-Corpus(DirSource("C:/Users/PRATEEK/Desktop/training tool/Text Analytics/text_file_main"))

1

これは本当に古いことは知っていますが、とにかくコピーして貼り付ける場合は、次を使用できます。

read.csv(readClipboard())

readClipboard()は、バックスラッシュをエスケープします。「.csv」がコピーに含まれていることを確認してください。おそらく次のようになります。

read.csv(paste0(readClipboard(),'.csv'))

また、タイピングを最小限に抑えたい場合は、いくつかの関数を使用できます。

setWD <- function(){
  setwd(readClipboard())
}


readCSV <- function(){
  return(readr::read_csv(paste0(readClipboard(),'.csv')))
} 

#copy directory path
setWD()

#copy file name
df <- readCSV()

0

Rは文字列の「\」をエスケープ文字として読み取っていると思います。たとえば、\ nは文字列内に新しい行を作成し、\ tは文字列内に新しいタブを作成します。

Rはこれを通常の円記号として認識するため、「\」は機能します。


0

readClipboard()直接動作します。パスをクリップボードにコピーします

C:\Users\surfcat\Desktop\2006_dissimilarity.csv

次に

readClipboard()

として表示されます

[1] "C:\\Users\\surfcat\\Desktop\\2006_dissimilarity.csv"

-3

簡単な方法は、Pythonを使用することです。Pythonターミナルタイプで

r "C:\ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv"を実行すると、「C:\ Users \ surfcat \ Desktop \ 2006_dissimilarity.csv」に戻ります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.