SPSSでRプラグインを実行しているときに、入力としてWindowsパス文字列を受け取ります。
'C:\Users\mhermans\somefile.csv'
後続のRコードでそのパスを使用したいのですが、スラッシュをスラッシュに置き換える必要があります。そうしないと、Rはそれをエスケープとして解釈します(たとえば、「\ Uは16進数なしで使用されます」エラー)。
しかし、バックスラッシュをスラッシュに置き換えたり、ダブルエスケープしたりできる関数を見つけることができませんでした。これらの関数はすべて、これらの文字がエスケープされていることを前提としています。
それで、次の線に沿って何かがありますか?
>gsub('\\', '/', 'C:\Users\mhermans')
C:/Users/mhermans
Scan()で「allowEscapes」引数を使用してみてください
X=scan(what="character",allowEscapes=F)
C:\Users\mhermans\somefile.csv
print(X)
[1] "C:\\Users\\mhermans\\somefile.csv"
まず、名前に割り当てる必要があります。
pathname <- 'C:\\Users\\mhermans\\somefile.csv'
名前ベクトルに入れるには、すべてを2倍にする必要があることに注意してください。これにより、正規表現の使用方法に関するヒントが得られます。実際、テキストファイルから読み込んだ場合、Rがすべての倍増を行います。気にしないでください本当にバックスラッシュを2倍にします。単一の円記号として保存されていますが、そのように表示されているため、コンソールからそのように入力する必要があります。それ以外の場合、Rインタープリターはそれを特殊文字に変換しようとします(多くの場合失敗します)。そして、問題を悪化させるために、正規表現はバックスラッシュをエスケープとしても使用します。したがって、grep、sub、またはgsubでエスケープを検出するには、円記号を4倍にする必要があります。
gsub("\\\\", "/", pathname)
# [1] "C:/Users/mhermans/somefile.csv"
バックスラッシュを二重に「2倍」にする必要がありました。 \の各カップルの最初は、次に来るのはリテラルであることをgrepマシンに通知することです。
考えてみましょう:
nchar("\\A")
# returns `[1] 2`
ファイルE:\ Data\junk.txtに次のテキスト(引用符なし)が含まれている場合:C:\ Users\mhermans\somefile.csv
次のステートメントで警告が表示される場合がありますが、機能します。
texinp <- readLines("E:\\Data\\junk.txt")
ファイルE:\ Data\junk.txtに次のテキスト(引用符付き)が含まれている場合: "C:\ Users\mhermans\somefile.csv"
上記のreadlinesステートメントでも警告が表示される場合がありますが、次のようになります。
"\" C:\ Users\mhermans\somefile.csv\""
したがって、必要なものを取得するには、受信ファイルに引用符がないことを確認し、次を使用します。
texinp <- suppressWarnings(readLines("E:\\Data\\junk.txt"))