web-dev-qa-db-ja.com

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

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

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

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

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

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

81
user297850

すべての\\\に置き換えます。

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

124
smitec

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)
}
27
Tyler Rinker

ソリューション

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

説明

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

Rはシーケンス\Uを知らないため、文句を言います。 "\""/"に置き換えるか、追加の"\"を使用して"\"を特別な意味からエスケープすれば、すべてがスムーズに機能します。

代替

Windowsでは、RのWindows固有のパスを使用してワークフローを改善するために最善のことは、たとえばカスタムホットキーを許可するAutoHotkey:

  • ホットキーを定義します。 Cntr-Shift-V
  • クリップボード内のバックスラッシュをスラッシュに置き換える手順を割り当てます...
  • rにパスをコピーして貼り付けたいときはいつでも使用できます Cntr-Shift-V の代わりに Cntr-V
  • エボイラ

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

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

My Solution は、次のように RStudioスニペット を定義することです。

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

このスニペットは、バックスラッシュ\を二重のバックスラッシュ\\に変換します。次のバージョンは、バックスラッシュをスラッシュ/に変換する場合に機能します。

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

希望のスニペットが定義されたら、次のように入力してクリップボードからパスを貼り付けます p-p-TAB-ENTER (つまり、ppを押してからタブキーを押して入力します)、Rフレンドリーな区切り文字を使用してパスが魔法のように挿入されます。

4
Josh Gilfillan

バックスラッシュ\をスラッシュに置き換えます/ Windowsマシンを実行している場合

3
Matthew J Watts

Windowsでは、バックスラッシュをスラッシュに置き換えるとうまくいきました。

2
Ehteshaam

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

例:

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

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

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()
1
Kevin Mc

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

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

それから

readClipboard()

として表示されます

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

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

Rはこれを通常のバックスラッシュとして認識するため、「\」は機能します。

0
mileslilly2